PDA

Просмотр полной версии : Что нужно для написания игр ?



Страницы : [1] 2

zx-kit
21.06.2009, 10:27
Какие минимальные доработки ZX Spectrum приведут к резкому увеличению количества и качества игр?

Какие аппаратные возможности нужны для запуска игр типа DUNE 2 и WARCRAFT 2 ?
Интересует класс игр со следующими характеристиками:
Цвет - человечки/монстры/машинки цветные.
Музыка - не FM.
Речь - люди/монстры говорят по-русски.
Управление - мышкой.
----------------------------------------------------
ПОЛЕЗНЫЕ ССЫЛКИ ПРИ РАЗРАБОТКЕ ИГР ДЛЯ ZX SPECTRUM:

Ассемблер: SjASMPlus (http://www.zx.pk.ru/showthread.php?t=447)
Эмуляторы: Ureal Speccy (http://www.zx.pk.ru/showthread.php?t=1512), ZXMAK2 (http://www.zx.pk.ru/showthread.php?t=16830)
Программа для рисования спрайтов: GALE (http://www.humanbalance.net/gale/us/)
Программа для преобразования BMP в картинку в формате ZX SPECTRUM: BMP2SCR (http://zx.pk.ru/showthread.php?t=11524)
Виды скроллинга при приближении к границе экрана: 1 (http://www.zx.pk.ru/showpost.php?p=615493&postcount=101), 2 (http://www.zx.pk.ru/showpost.php?p=615599&postcount=105), 3 (http://www.zx.pk.ru/showpost.php?p=615634&postcount=106), 4 (http://www.zx.pk.ru/showpost.php?p=615718&postcount=111)
Быстрые алгоритмы поиска пути: 1 (http://www.zx.pk.ru/showpost.php?p=348579&postcount=63), 2 (http://www.zx.pk.ru/showpost.php?p=372558&postcount=99)
Библиотека подпрограмм на ассемблере: на сайте www.z80a.ru (http://www.z80a.ru/biblioteka-podprogramm)
----------------------------------------------------
Для профессионалов, которых хотят поделиться своим опытом с новичками в программировании игр на ассемблере. Хранение библиотеки подпрограмм на сайте:
Можно временно выкладывать файлы в этой теме. Потом почистим. Каждая подпрограмма должна быть в отдельном текстовом файле, в виде пригодном для копирования в основной файл программы на ассемблере SjASMPlus. В одном посте влезает до 5 файлов. Файл должен быть заархивирован в формат zip. Архивы нумеруйте по дате и номеру файла в этот день, например: 130718-01.zip, 130718-02.zip. В тексте поста напишите, что в каждом файле.

На страничке (http://www.z80a.ru/biblioteka-podprogramm) буду собирать подпрограммы по типу c указанием номеров файлов, например:

Шрифты с русскими буквами: 130718-01, 130721-01, 130721-02.

Такая нумерация обеспечит уникальность имен всех файлов и укоротит ссылки для их скачивания. Также по имени сразу видно, когда был создан архив. После разархивирования на компьютере начинающего программиста длинное имя файла восстановится.

Aprisobal
21.06.2009, 12:16
Цвет - человечки/монстры/машинки цветные. Минимум турбированный Z80 (7Mhz) и больше.


Музыка - не FM. Значит General Sound?


Речь - люди/монстры говорят по-русски.На хранение речи в WAV'ах в GS'e памяти думаю может не хватить.


Управление - мышкой.Наличие Kempston Mouse.

zx-kit
21.06.2009, 12:57
Предполагаю, что лучше проигрывать запись. Так больше разнообразия звуков. Например, композитор на синтезаторе написал мелодию, кодер преобразовал ее в цифровой формат.



Значит General Sound?


А AY и NeoGS подходят для этого?



На хранение речи в WAV'ах в GS'e памяти думаю может не хватить.


Может какой-нибудь сжатый формат использовать или mp3.


А если cделать по принципу: послал блок со сжатым в каком-нибудь формате блоком в устройство, а оно само разжимает и постепенно выводит через AY или ЦАП?


По способу вывода на экран какие-нибудь соображения есть?

Aprisobal
21.06.2009, 15:18
A AY и NeoGS подходят для этого?Для вывода цифрового звука в AY/Covox/SoundDrive нужно практически все процессорное время обычного Z80. NeoGS подходит, конечно же.


По способу вывода на экран какие-нибудь соображения есть? 16 color mode by Alone Coder, если не ошибаюсь.

А к чему все эти вопросы можно узнать?

AAA
21.06.2009, 15:48
В этом нажми Интро, после слов, будет музон. Это наверно лучшая реализация цифрового звука без GS.

http://zxaaa.untergrund.net/GAME/479.zip

zx-kit
21.06.2009, 17:21
Для вывода цифрового звука в AY/Covox/SoundDrive нужно практически все процессорное время обычного Z80. NeoGS подходит, конечно же.



Жалко, что NeoGS есть не у всех. A если DMA прикрутить к AY это помогло бы для озвучивания игр? Речь можно будет понять?



16 color mode by Alone Coder, если не ошибаюсь.


Где про это почитать?



[quote]
А к чему все эти вопросы можно узнать?


Успех Спектрума из-за огромного количества старых игр. А новых мало.
Пытаюсь понять почему не пишут. Может что улучшить надо для упрощения написания игр.

---------- Post added at 19:21 ---------- Previous post was at 19:18 ----------


В этом нажми Интро, после слов, будет музон. Это наверно лучшая реализация цифрового звука без GS.


Пока не на чем. Есть Спек48 и ZX-NEXT. Но уже нет дисководов и не подключен телевизор.
Надо делать PAL-кодер.

Rindex
21.06.2009, 17:29
Пока не на чем. Есть Спек48 и ZX-NEXT. Но уже нет дисководов и не подключен телевизор.
Надо делать PAL-кодер.

Ооо, это тяжёлый случай. Я ещё ты тут вроде игры хотел делать... Ну для начала скачай эмулятор что-ли какой. Типа Unreal или Spectaculator.

zx-kit
21.06.2009, 17:33
Ооо, это тяжёлый случай. Я ещё ты тут вроде игры хотел делать... Ну для начала скачай эмулятор что-ли какой. Типа Unreal или Spectaculator.

Я скорее о железе подумываю вот и спрашиваю у тех кто разбирается в играх.

Rindex
21.06.2009, 17:36
Я скорее о железе подумываю вот и спрашиваю у тех кто разбирается в играх.

Сначало надо увидеть и послушать, что тебе предлагают, а уже потом думать о железе. :)

Evgeny Muchkin
21.06.2009, 17:42
Жалко, что NeoGS есть не у всех.
Было бы действительно жалко, еслы бы ни у кого не было бы возможности её приобрести! Купить её может совершенно свободно любой желающий.

Имхо, по звуку смело можно ориентироваться на GS с 2 мегами памяти на борту. Влезет все!

По графике - только обычный ZX экран.


Надо делать PAL-кодер.
Тоже не надо ничего придумывать; все уже сделано и сделано очень качественно. При всем при этом, цена готового изделия минимальная и подъемная.

Kpa3
21.06.2009, 17:52
Например, композитор на синтезаторе написал мелодию, кодер преобразовал ее в цифровой формат.

Минут 10 втыкал в эту фразу. Так ничего и не понял.


Может какой-нибудь сжатый формат использовать или mp3.

Дадада, и в качестве декодера-проигрывателя подключаем к спектруму PC, с аудиокарты которого будем гнать аналоговый звук прямиком на бипер спектрума. это идея!


А если cделать по принципу: послал блок со сжатым в каком-нибудь формате блоком в устройство, а оно само разжимает и постепенно выводит через AY или ЦАП?

Вот тут РС и пригодится. А чтоб снизить затраты, берем дешевый 386, для "разжатия" mp3 по блокам. Два канала не обязательно юзать,сойдет и моно. Битрейт - 96 kbps.


По способу вывода на экран какие-нибудь соображения есть?

А как же. Изображением займется NES. Осталось только все эти блоки собрать воедино.
И написать таки мморпг. А то Warcraft2 как-то некошерно в наш век.

^m00h^
21.06.2009, 18:07
Нет, 386 ужасно шумит, эта рухлядь еще и пожароопасная, лучше будет собрать аппаратный декодер звука/видео на базе ARM, и чем черт не шутит, запихнуть в него же сам спек и езернет.

Kpa3
21.06.2009, 18:48
Нет, 386 ужасно шумит, эта рухлядь еще и пожароопасная, лучше будет собрать аппаратный декодер звука/видео на базе ARM, и чем черт не шутит, запихнуть в него же сам спек и езернет.

да, так будет лучше. у меня где-то даже были исходники-библиотеки для работы с mp3, в pic контроллеры прошивали)

zx-kit
21.06.2009, 18:57
Было бы действительно жалко, еслы бы ни у кого не было бы возможности её приобрести! Купить её может совершенно свободно любой желающий.

Покупать надо, если есть игры под нее. Пока неверно она есть не у всех, а AY- у многих.



Имхо, по звуку смело можно ориентироваться на GS с 2 мегами памяти на борту. Влезет все!

Это хорошо! Значит со звуком проблем нет.



По графике - только обычный ZX экран.


А как же отличать кланы? В стандартном цвете много не нарисуешь. А без цвета не интересно.



Тоже не надо ничего придумывать; все уже сделано и сделано очень качественно. При всем при этом, цена готового изделия минимальная и подъемная.

С этим я не спорю.

Evgeny Muchkin
21.06.2009, 19:15
В стандартном цвете много не нарисуешь.
Потому это и Speccy, а не пц.
Клоны? Даже на казалось бы стандартизированном режиме расширенной графики P1024SLv2.2 особо не порисуешь... вернее, порисовать то, конечно, можно, и даже очень; но вот потом подвигать это, в игровом процессе процессорного времени не хватит на действительно красивую картинку.

Покупать надо, если есть игры под нее. Пока наверно она есть не у всех, а AY- у многих.
Ну для обычной GS игр, да и софта предостаточно, соответственно и под NeoGS ровно столько же на данный момент.
AY - да! AY всегда рулит! (жаль тока, что мои домашние этого не понимают ;)) , но качественных голосовых эффектов из неё не выжмешь. :(

zx-kit
21.06.2009, 19:43
Потому это и Speccy, а не пц.


Но ведь это сокращает количество написанных игр.



Клоны? Даже на казалось бы стандартизированном режиме расширенной графики P1024SLv2.2 особо не порисуешь... вернее, порисовать то, конечно, можно, и даже очень; но вот потом подвигать это, в игровом процессе процессорного времени не хватит на действительно красивую картинку.


А если была бы видеокарточка типа NeoSCR ? Конечно не Open GL, а что нибудь простое для ускорения до скорости как при работе со стандартным экраном.

Интересен порядок операций с графикой для игры типа WARCRAFT 2.


Ну для обычной GS игр, да и софта предостаточно, соответственно и под NeoGS ровно столько же на данный момент.
AY - да! AY всегда рулит! (жаль тока, что мои домашние этого не понимают ;)) , но качественных голосовых эффектов из неё не выжмешь. :(

Мои домашние тоже не понимали, когда я слушал демки.

Higgins
21.06.2009, 20:48
Напрашивается такой вопрос: можно ли выдумать игрушку, которая:

a) ничего не теряла бы по существу от того, что реализована в рамках аппаратных возможностей Спектрума, как в случаях с Jumping Jack и Ms. Pacman но при этом

b) предлагала бы достаточное разнообразие игровых ситуаций, чтобы не быть игрушкой на один день, как в случае с Warcraft.

На мой вкус, Lode Runner приближается к этой формуле. Но вот попробуйте выдумать что-нибудь новое... ;-)

Aprisobal
22.06.2009, 01:40
Наконец понял, что хочет ТС. Тему нужно перенести в раздел железа?

ИМХО(и ближайшее время это мнение не изменится) железо Спектрума менять ни в коем случае нельзя, каким он был (128кб/AY), таким и должен остаться.

Я бы хотел: аппаратный довесок для выхода в сеть Интернет - со своей стороны доработал бы для SquareMania автоматический постинг топ-очков, вместо генерации кода. Если такое уже разрабатывается, то прошу кинуть ссылку. Если уже реализовано и в эмуляторе, то тоже интересно.

Ewgeny7
22.06.2009, 15:13
ИМХО(и ближайшее время это мнение не изменится) железо Спектрума менять ни в коем случае нельзя, каким он был (128кб/AY), таким и должен остаться.
Естественно. Ибо это Спектрум. Железо развивается (в большинстве своем) в плане перехода на более современные комплектующие, расширение возможностей при сохранении стандарта и повышение удобства работы (HDD, CD-DVD, SD, SIMM, PC-keyb...). Эти продукты развития опционны и сути машинки не меняет, убери их - и ничего страшного не произойдет... Просто ковыряться с дискетами неудобно, да и старую кнопочную клавиатуру фик найдешь.

bigral
22.06.2009, 18:00
Какие аппаратные возможности нужны для запуска игр типа DUNE 2 и WARCRAFT 2 ?
Один из самых очевидных ответов будет - нужно железо аналогичное тому на котором эти игры и работали DUNE2 (cpu~16mhz;ram~1Mb) и WARCRAFT2 (cpu~33Mhz;RAM ~4Mb) ну графика 256 цветов и ДОСТАТОЧНАЯ скорость (либо за счет основного процессора тогда cpu_clock*2 либо за счет аппаратных спрайтов).



Интересует класс игр со следующими характеристиками:
Цвет - человечки/монстры/машинки цветные.
Музыка - не FM.
Речь - люди/монстры говорят по-русски.
Управление - мышкой.

Такого плана игрушки были на Atari 16bit Amiga SNES MegaDrive SONY-PS1 pc386/DOS.
На сегодняшний день в этом сегменте продают: MEGADRIVE, PS2, x86, Wii, PSP, DS, retroleum, HYDRA, minimig, DE1, C1

---------- Post added at 17:00 ---------- Previous post was at 16:54 ----------


b) предлагала бы достаточное разнообразие игровых ситуаций, чтобы не быть игрушкой на один день, как в случае с Warcraft.

Помоему Warcraft как и шахматы игра вечная при условии что туда добавлять все больше разных карт.

zx-kit
22.06.2009, 18:09
Наконец понял, что хочет ТС. Тему нужно перенести в раздел железа?


Не надо в железо! Я как железячник хочу узнать мнение программистов игр.



ИМХО(и ближайшее время это мнение не изменится) железо Спектрума менять ни в коем случае нельзя, каким он был (128кб/AY), таким и должен остаться.


Пока Спек не изменится новых игр будет мало.



Я бы хотел: аппаратный довесок для выхода в сеть Интернет - со своей стороны доработал бы для SquareMania автоматический постинг топ-очков, вместо генерации кода. Если такое уже разрабатывается, то прошу кинуть ссылку. Если уже реализовано и в эмуляторе, то тоже интересно.

Это тоже аппаратная доработка.

---------- Post added at 20:09 ---------- Previous post was at 20:07 ----------


По теме сабжа и по теме Поста №1 сказать пока нечего, но можно маленький оффтоп: почему этот сабж не соответствует посту №1 ? а то люди могут зайти в тему, ожидая вопросов про НАПИСАНИЕ игр, а тут вопросы про ЗАПУСК...

Попробую по-другому задать вопрос:
- Какие минимальные доработки ZX Spectrum приведут к резкому увеличению количества и качества игр?

bigral
22.06.2009, 18:24
Интересен порядок операций с графикой для игры типа WARCRAFT 2.

С 2D графикой есть такие фукции:
1. Операции вывода кусочков картинки (спрайты или регионы) в заданное место (blitter);
2. Операции перемещения кусочков картинки или сдвиги (нужны при условии что они работают быстрее чем простая перерисовка на новом месте из пункта 1);
3. Прорисовка различных примитивов (точки линии фигуры шрифт) (при условии что создание примитива работает эфективные чем с помощью пункта 1);
4. Заливка текстурой, сглаживание и т.д. (при условии что работает эфективные чем с помощью пункта 1);

---------- Post added at 17:24 ---------- Previous post was at 17:17 ----------


Попробую по-другому задать вопрос:
- Какие минимальные доработки ZX Spectrum приведут к резкому увеличению количества и качества игр?

Ответ - никакие. Потому что даже на игровых приставках сейчас мало пишут игр изза "КРИЗИСА ЖАНРА". И неясно в какие игры народ бы сейчас играл даже при ПОЛНОЙ переделке спектрума в апарат аналогичный PS3 :) Кроме спектрума доступно куча хорошего железа и было бы токо желание что-то делать.

cherkasy
23.06.2009, 15:44
по-моему все это ерунда...
либо пишутся игры под стандартные спектрумы сейчас, что практикуется например в испании, либо спектрум как платформа загнется в екс-СССР.
количество желающих написать игры под имеющееся железо - невелико, что уж говорить о более сложном железе.

Higgins
23.06.2009, 16:32
Какие минимальные доработки ZX Spectrum приведут к резкому увеличению количества и качества игр?

Перелепить наклейку от Спектрума на корпус PC, добавить "z" слева от "x86" и подать общественности как ребрендинг и переход, вслед за Apple Mac, на "наиболее перспективную аппартную платформу".

Сегодня Спектрум, кроме ностальгических мотивов, интересен именно тем, что под него уже создано большое количество софта, по большей части бесплатного. У меня ребенок младшего школьного возраста проявляет большой интерес к игрушкам, запускаю ему на эмуляторе. Но вот новое писать -- если только демонстрировать свою изворотливость и техническую подкованность в тонкостях архитектуры, а объекта творения для этого за пределами жанра демонстрации не найдется.

zx-kit
23.06.2009, 18:00
по-моему все это ерунда...
количество желающих написать игры под имеющееся железо - невелико, что уж говорить о более сложном железе.

А если сделать такое железо, которое упрощает и ускоряет вывод на экран - блиттер, например? Тогда не надо будет использовать всякие ухищрения, которые могут отбить желание у начинающих.

Spir0
23.06.2009, 19:14
Сижу читаю и грустно :) Вот если бы то да это, а если бы еще и вот так тогда ух какое бы написали. А на самом деле даже в существующих рамках было создано много шедевров игровых, которые вообще считались для спектрума нереальными. Так что имхо самое главное что нужно для написания игры - это идея и желание :)

bigral, zst, был в свое время проект с подключением чипа от приставки, который все эти фишки мог делать, чем это закончилось - ничем, т.к. слишком много надо было ковырять и не ко всем клонам можно было подключить. В итоге - вроде и есть оно, но только у одного.. двух.. трех.. - кто то будет ради них затевать проект ?

bigral
24.06.2009, 12:19
bigral, zst, был в свое время проект с подключением чипа от приставки, который все эти фишки мог делать, чем это закончилось - ничем, т.к. слишком много надо было ковырять и не ко всем клонам можно было подключить. В итоге - вроде и есть оно, но только у одного.. двух.. трех.. - кто то будет ради них затевать проект ?

Может и будет при условии что все определятся со списком СОФТ-а который что называется ВСЕ ХОТЯТ! Ато вот в разделе СОФТ завел тему о том какого же софта нехватает для спекки и пока список этого софта непросматривается никак. IDE и компиляторы - зачем чтоб опять писать IDE и компиляторы? browser - он точно всем очень нужен? ну тогда пожалуй будет кандидат в список. Короче такое впечатление пока что софт новый либо ненужен либо не очень то нужен. А пока ненужен софт о железе совсем рано говорить, а иначе выйдет железо и пойдут бестолковые демы под него клепать никому ненужные.

Aprisobal
24.06.2009, 13:18
... а иначе выйдет железо и пойдут бестолковые демы под него клепать никому ненужные. Не согласен, за счет демомейкинга Спектрум только и живет.

psb
24.06.2009, 15:36
может просто засунуть спек в мегамашину Romanich'а? там вам и мп3 будет и что угодно. но ситуации это не поменяет. ибо deadlock в развитии спека, связанный с деньгами.

Aprisobal
24.06.2009, 18:15
ибо deadlock в развитии спека, связанный с деньгами. Здесь, начиная с поста 203935, хочу помочь выйти из "deadlock"'a, но народ не пробиваем. Не подключишься к обсуждению?

_Andrey
24.06.2009, 21:31
Аппаратные доработки Спектрумов выпущенных более 8-10 лет назад бесперспективны. Нужно поддерживать дополнительные более менее распространенные ресурсы с сохранением
работоспособности на 128К+AY+TRDOS. Допустимо с ограниченной функциональностью.
Дополнительные аппаратные ресурсы для игр (с моей точки зрения):
-Память 256-1024КБ. Работа только через драйвер. Больше места под данные и код.
128К все спрайты ЧБ, 256К и выше цветные и/или в распакованном виде для скорости (доп уровень сложности)
-Турбо режим 7Мгц. Работа через драйвер. Коофициент турбирования от ~1,5 до 2-х
Доп уровень сложности/ качества графики , звука
-Винчестер IDE/ CD/ DVD/ MMC/ SD/ CF. Работа через драйвер.
Быстрая загрузка уровней. Цифровой звук. Интерактивные видеофильмы.
-Звук на усмотрение
а) СOVOX/ SounDrive. С настройкой портов. Проигрывание цифровых эффектов, музыка через AY
б) TS/ TSFM. Проигрывание музыки и эффектов
в) GS/ NeoGS. Проигрывание музыки и эффектов в т.ч. и пакованной или mp3 (NeoGS). Акселерация математики для 3Д
-С видео вопрос сложный. Теоретически при сохранении стандартного экрана при использовании вышеперечисленного уровень игры возрастает существенно. Возможно применение 16 цветов на точку. Хотя мне больше нравится аппаратный мультиколор, жаль только 1 игра.
При режимах цвет на точку (программных и аппаратных) можно конвертить экраны с других платформ. Фильмы, видеовставки цветные.
-Мышка Kempston опционально с поддержкой колеса, джойстики
P.S. Нужно оценивать целесообразность использования ресурсов. Сделал простенькую игру логику работает на Спектруме 16К. Даже если по всякому наворачивать, но не бездумно, больше 48К+AY не целесообразно использовать.
P.P.S. Кто бы доделал DOOM от Dgital Reality и HyperSoft.

zx-kit
14.12.2010, 19:09
Когда-то я написал две игры в машинных кодах и на Бейсике и адаптировал одну с другого компьютера.
Было это очень давно и игры тогда были простые.

"PIF-PAF". Компьютер "Радио-86РК", машинные коды КР580ВМ80А. Два пистолетика двигаются вверх-вниз и стреляют друг в друга сквозь кактусы. Псевдографика.
"Перейди автотрассу". Компьютер "Радио-86РК", Бейсик. Несколько полос дороги с разным направлением, скоростью и промежутками между "машинами". Нужно добраться на другую сторону.
"ZOO". Компьютер "Радио-86РК", машинные коды КР580ВМ80А. Адаптация игры с компьютера "Специалист" с заменой знакогенератора в ПЗУ "Радио-86РК" (установка РФ2). Снежный человек бегает по этажам, лестницам и турникам и собирает чайники. Ему мешают два полицейских. Можно делать ямы, которые со временем зарастают. Иногда вместе с полицейскими.

Позвольте задать еще несколько вопросов.
Допустим, я все-таки захотел начать писать игры.
Где мне взять сценарий игры, которую можно реализовать на Спектруме.
И что делать дальше. Умею писать алгоритмы и реализовывать их на ассемблере, Бейсике или С.

Тема интересна тем, что я в ней почти ничего не знаю. Про трудности и т.п.
И может люди начнут коллективно писать игры, а не демы.

goodboy
14.12.2010, 20:02
Допустим, я все-таки захотел начать писать игры.
Где мне взять сценарий игры, которую можно реализовать на Спектруме.

как вариант конверсия с cpc,msx,sms,gg того чего нет на zx. у всех процессор z80 - значит в коде разобраться проще

cherkasy
14.12.2010, 20:04
попробуй сделать например продолжение какой-то игры или усовершенствуй в ней что-то...
посмотри на новый игры, написанные для конкурса "Твоя Игра" или например с сайта WOS

moroz1999
15.12.2010, 11:29
Я, возможно, скажу глупость, но сценарий - не первый приоритет. Работоспособный движок игры - вот первый приоритет.
Рекомендую сначала наладить мини-демо игрового процесса. После этого можно и художников поспрашивать, и сценаристов поискать.

zx-kit
15.12.2010, 18:51
Я, возможно, скажу глупость, но сценарий - не первый приоритет. Работоспособный движок игры - вот первый приоритет.
Рекомендую сначала наладить мини-демо игрового процесса. После этого можно и художников поспрашивать, и сценаристов поискать.

Так какую игру делать то? Сценарий нужен.
И, например, делаю стрелялку. Надо выбрать вид летающего/ходячего объекта. И самое главное - как появляются препятствия/враги чтобы и герой умирал не часто и пройти было возможно и стрелять было в кого.
Ну чтобы играть было интересно. Даже без звука.

---------- Post added at 20:51 ---------- Previous post was at 19:05 ----------

Несколькими постами выше было предложение:

...
P.P.S. Кто бы доделал DOOM от Dgital Reality и HyperSoft.
Давайте доделаем ! Что осталось сделать и где уже сделанное ?

moroz1999
15.12.2010, 21:05
Если я правильно понимаю, исходников Doom нет.

Вместо этого, имхо, куда как реалистичнее основаться на Wolfenstein 2004 - под него даже редактор уровней был.

moroz1999
15.12.2010, 21:05
Если я правильно понимаю, исходников Doom нет.

Вместо этого, имхо, куда как реалистичнее основаться на Wolfenstein 2004 - под него даже редактор уровней был.

zx-kit
15.12.2010, 21:38
Если я правильно понимаю, исходников Doom нет.

Вместо этого, имхо, куда как реалистичнее основаться на Wolfenstein 2004 - под него даже редактор уровней был.

Не, из-за ограничений двух цветов на знакоместо такие игры не будут играбельными.

moroz1999
15.12.2010, 22:04
Wolf был весьма играбельным.

Segfault
15.12.2010, 22:26
Игры пишут в расчете на получение денег и/или круто-фактора. Ни того, ни другого не предвидится. Поэтому и игр не будет. Другое дело - исследовательские поделки/демы/конверсии. Для них пентева а лучше кошерный кай в турбо режиме с сауд а главное видеокартой от миклабс считаю отличный полигон. Спектранет кстати тоже как бы к нему скептически не относились потенциально рулезный. Первое что приходит в голову - конверсия "танчиков" с денди вдвоем по инету.

moroz1999
15.12.2010, 23:18
Танчики - хороший вариант. На ZX было 3 или 4 конверсии, но все неиграбельные по сравнению с оригиналом.
Плюс, сама идея отлично может быть доработана, как визуально (нормальные дома и развалины вместо абстрактных кирпичей), так и в игровом смысле - разные враги и оружия.

Segfault
15.12.2010, 23:25
дальше уже пойдет полный оффтоп, но дайте уж включить капитана очевидность. Фактор "круто-круто" проистекает от того, что ты тупо не отдаешь себе отчета, что это вовсе не круто. :) Т.е. когда ты слабо разбираешься и в компах, и в их истории, и архитектуре и программировании (ну слов таких даже не знаешь), то для тебя и бегущая строка будет круто. Каждый новый день на спектруме тогда приносит кучу радостей и полезностей, а если еще и товарищи идут с тобой по тому же пути, то вообще атас, можно передирать друг у друга эффекты :) . Ты реально растешь и это правда.
Когда же ты перековырял пц вдоль и поперек, и уже 10 лет работает пц-программистом, админом и т.п., то работа над софтом спектрума как ты это чувство не глуши, напоминает тебе забавы дедули впавшего в маразм и отобравшего лего у малОго. Т.е. тотальный даунгрейд встречает внутреннее сопротивление. И ты пытаешься найти иные формы спектруминга, более познавательные и респектабельные. Коллекционирование, обмен/продажа, хард, флуд, флейм, разговоры за жизнь, за спектрум. Что мы и наблюдаем. Я долго думал по поводу того, что все это очень логично но больно уж не хочется подчинятся естественному порядку вещей, ведь так обидно. Поэтому я "разработал" одну хитрость. Кто хочет что-то написать на спеке и вообще почувстовать себя более спектрумистом чем писишником, я бы предложил недельки две/месяцок юзать дома исключительно спек. Через несколько дней начинаются психологические метаморфозы. Ты как бы становишься оживаешь, начинаешь ощущать почву под ногами. Чувство похоже на то, как сходил в поход в лес: сыро, трава по пояс, никаких удобств, комарье... а приятно. И сразу же начинаешь что-то предпринимать, облагораживать среду, нарубить дров, поставить палатку, выкопать ямку под мусор, найти что-нибудь съедобное. Вообщем творец локального счастья, а не тупо бесправный потребитель. Так же и с "походом на спектрум". Спектрум с каждым днем начинает казаться тебе все менее и менее "игрушечной" машиной. И тебя все более и более бесит толпа спектрумистов канализирующих свою творческую энергию в писишную помойку, точнее не толпа, а их бессознательность, мол одумайтесь леминги. Начинаешь смотреть на все с какой-то другой стороны. Тебе сразу же становится понятно зачем видеокарта и спектранет с интенетом. А на вопрос "почему никто ничего не делает для спека" ты уже 100% уверенно отвечаешь "а потому что спектрумистов нету, одни писишники". Это я не в обиду, а показываю, как происходит обособление, отделение от писизма в автономную компьютерную платформу. Продолжая аналогию с лесом, современный нам спектруминг похож на форум бывалых туристов и охотников, которые только и делают, что обмениваются фотографиями и историями, как они когда-то, в 1995, провели лето. "Я вот такооого медведя в 1997 завалил на 400 кило! Да что ты, а я сейчас на мовимейкере склепал демку как мы лосося ловим - вот это классная работа, зачет!! А я, ая уже насобирал 50 гигов фоток с лесными пейзажами, вота они! [сказать спасибо]. А ты, что ты конкретно флудер несчастный сделал для охотничьего движения???". И при этом бывшие охотники/туристы недоумевают, а от чего это лесные переживания у них не такие сильные, как раньше. "Надо усилить накал обмена фотографиями и коллекционирования байек". И никому не приходит в голову...... просто тупо сходить в лес. Ну несолидно же. Тебе надо ты и иди. Какие-то окололесные темы. А как же железячники? Их бы я сравнил с мастерами с гипотетического охотничьего форума. Один снегоход соорудил, другой аэросани, третий многоствольный пулемет под крупную дичь, чтобы уж наверняка. А настоящих лесных эмоций все нет и нет. "Какую бы вам еще машину господа туристы/охотники соорудить, чтобы появлялось побольше реальных походов в лес??. "Сооруди им большую стальную ногу и пусть она им даст пендаля..."

конец потока сознания. так вот, также будучи в автономном спектрум-походе у тебя появляется интерес перечитать книжки по спеку, что-то нарисовать, написать софт. И кстати юзание PC в рабочее время идет более производительно - начинаешь ценить мелочи ). Короче мой эксперимент безписишного спектруминга провалился, т.к. у меня походу вымерла вг-шка после чего я тупо уничтожил чертверть платы пытаясь что-то самостоятельно "наладить", но мне кажется я нащупал путь и намерен повторить "спектрум заходы" уже более длительно и продуктивно. Чего и всем желающим желать (я про написание софта) желаю.

---------- Post added at 23:25 ---------- Previous post was at 23:19 ----------

moroz1999, мороз я имел ввиду прикол танчиков именно в поддержке мультиплеера по инету вдвоем. Включил реал, загрузил танчики, подключится к серверу, поставил заявку на ожидание, к тебе подключился товарисщ с удаленки и поехали вдвоем наводить конституц. порядок :) Это раньше легко было зайти к другу в гости после школы чтобы поиграть с клавы+джойстик, а сейчас тока инет

Slesar
16.12.2010, 01:22
Так какую игру делать то? Сценарий нужен.
ИМХО, начать стоит с выбора игровой механики, задать "правила игры". Для спектрума как для аркадной машины это важно. Механика и заданные в ней свободы игрока определят объем кодинга. Причем, используя готовые принципы в нестандартной обстановке, можно родить вин (например, Зума, использующая гибрид механики тетриса и лайнс на необычном поле). Я, кстати, не видел клона Зумы на спеке...
Потом надо выбрать сеттинг (игровые реалии, объекты, персонажей), продумать взаимодействие объектов.
Потом написать сценарий (внятно объяснить смысл действия, его предпосылки, развязку, реплики персонажей).
Потом нарисовать графику (задники, спрайты, заставки).
Потом написать музыку (скажу по себе - качество звукового сопровождения во многом определяет впечатление от игры).
А потом - кодить, кодить, кодить...

Slesar
16.12.2010, 01:22
Так какую игру делать то? Сценарий нужен.
ИМХО, начать стоит с выбора игровой механики, задать "правила игры". Для спектрума как для аркадной машины это важно. Механика и заданные в ней свободы игрока определят объем кодинга. Причем, используя готовые принципы в нестандартной обстановке, можно родить вин (например, Зума, использующая гибрид механики тетриса и лайнс на необычном поле). Я, кстати, не видел клона Зумы на спеке...
Потом надо выбрать сеттинг (игровые реалии, объекты, персонажей), продумать взаимодействие объектов.
Потом написать сценарий (внятно объяснить смысл действия, его предпосылки, развязку, реплики персонажей).
Потом нарисовать графику (задники, спрайты, заставки).
Потом написать музыку (скажу по себе - качество звукового сопровождения во многом определяет впечатление от игры).
А потом - кодить, кодить, кодить...

null_device
16.12.2010, 09:11
Wolf был весьма играбельным.

Что осталось сделать и где уже сделанное ?

Демо версия от DR тоже вполне играбельна при том, что игровой движок работает в цвете и спрайты не выглядят как "чанки", в том же Wolf.
Маловероятно, что исходный код когда-либо выкладывался в открытый доступ. В виде бета релиза, лежит в приложении к 22 Spectrofon'у.

zx-kit
16.12.2010, 11:06
Танчики - хороший вариант. На ZX было 3 или 4 конверсии, но все неиграбельные по сравнению с оригиналом.
Плюс, сама идея отлично может быть доработана, как визуально (нормальные дома и развалины вместо абстрактных кирпичей), так и в игровом смысле - разные враги и оружия.

Мне тоже нравится игра Танчики на Денди. Она немного похожа и на мою игру PIF-PAF. Там тоже приходилось сначала в кактусах прострелить путь для пули. В танчиках хорошая музыка и свобода передвижения объектов.


ИМХО, начать стоит с выбора игровой механики, задать "правила игры". Для спектрума как для аркадной машины это важно. Механика и заданные в ней свободы игрока определят объем кодинга.
Причем, используя готовые принципы в нестандартной обстановке, можно родить вин (например, Зума, использующая гибрид механики тетриса и лайнс на необычном поле).

Что можно изменить в Танчиках, чтобы играть стало интереснее? Может из Warcraft2 что-нибудь взять?


Я, кстати, не видел клона Зумы на спеке...

Э... Зума - это цветные шарики катятся по фигурным желобам и надо стрельнуть в нужное место цветным шариком, чтобы было три подряд?
Но результат игры почти случаен. Зависит от того, какие шарики выпадают.


Потом надо выбрать сеттинг (игровые реалии, объекты, персонажей), продумать взаимодействие объектов.

Ну с Танчиками все просто. Разные самоходные объекты, возможно живые, с разными параметрами жизни и боевой силы, разного цвета.
Препятствия как в Танчиках + еще какиенибудь.


Потом написать сценарий (внятно объяснить смысл действия, его предпосылки, развязку, реплики персонажей).

С этим - сложнее. От этого удовольствие от игры зависит. Возможно - это самое главное. Потом звук.


Потом нарисовать графику (задники, спрайты, заставки).
Потом написать музыку (скажу по себе - качество звукового сопровождения во многом определяет впечатление от игры).
А потом - кодить, кодить, кодить...
Да, для одного человека это не под силу.
Но можно создать библиотеку быстрых в работе модулей для вывода звука, опроса клавиатуры, копирования на экран.

---------- Post added at 12:54 ---------- Previous post was at 12:01 ----------

Предлагаю в танчиках играть двумя руками:
Левой рукой (A,D,W,S) управлять движением танка, правой (CURSOR) - управлять направлением стрельбы.

---------- Post added at 12:56 ---------- Previous post was at 12:54 ----------

Можно сделать возможным стрельбу под 45 градусов.

---------- Post added at 13:02 ---------- Previous post was at 12:56 ----------

Можно учитывать баллистику - снаряд летит на рассояние, которое зависит от угла подъема орудия. Тогда управлять орудием можно так. Поворот на 45 градусов влево/вправо и подъем/опускание на 5 градусов. Тогда снаряд будет взрывать только в месте падения. А если надо убивать всех в упор, то переключиться на более легкое орудие типа пулемета крупного калибра.

---------- Post added at 13:06 ---------- Previous post was at 13:02 ----------

Можно предусмотреть мосты, подземные переходы для проезда танчиков. Еще бы хорошо реализовать передвижение под углом 45 градусов. То есть возможны 8 направлений движения, если нет препятствий.

Wlodek
16.12.2010, 11:08
Допустим, я все-таки захотел начать писать игры.
Где мне взять сценарий игры, которую можно реализовать на Спектруме.


Вот это-то и есть главное. Сценарий должен быть. А всё остальное (знание архитектуры компьютера, машинных кодов, написание или нахождение "движка", создание графики и музыки и т.д.) "приложится". При особом желании "приложится", даже если нет талантов в чём-то (например, в музыке) - при наличии одержимости удастся даже создать коллектив, пусть всего на один проект. Ну и ещё нужно будет терпение :) .

zx-kit
16.12.2010, 11:26
Дополнительные возможности для Танчиков. Выбор ботов с возможностью создавать своих. Снабдить их искусcтвенным интеллектом, который можно запрограммировать вручную. Но чтобы бот на стороне компьютера не знал нашего места положения, а действовал только на основе той информации, которую видит через препятствия. Если ему не предоставит дополнительную информцию какой-нибудь вертолет-разведчик.

Хотя нет. Пусть видит все поле. Ведь мы же будем видеть.

---------- Post added at 13:26 ---------- Previous post was at 13:12 ----------

Может будет интересна автономная битва ботов, запрограммированных двумя людьми.
Но такое будетв возможно только в будущем. И просто смотреть не особо интересно...

Slesar
16.12.2010, 13:09
Но результат игры почти случаен.
Благодаря тому, что механика игры допускает многоуровневые комбо, Зума становится чуть ли не стратегической игрой.

Что можно изменить в Танчиках, чтобы играть стало интереснее?
Можно добавить элемент "поиска предметов в лабиринте" - не показывать игроку всю карту, а только фрагмент. При этом уменьшить скорость перемещения. Это даст интерес исследования. Была похожая игра на спеке - Vectron. Там убиение танчиков вообще от первого лица.
Можно, как ты сказал, добавить баллистику, например, в виде еще одного бонуса - все танчики, включая свой, останавливаются на время, при этом игрок может (на манер Scorched Earth) навести выстрел в любую точку карты.
Чтоб добавить элементы Варкрафта, надо сделать командную систему со строительством, дружественный ИИ.


Снабдить их искусcтвенным интеллектом, который можно запрограммировать вручную. Но чтобы бот на стороне компьютера не знал нашего места положения
ИМХО, надо делать на основе волнового алгоритма в 2 уровня - поиск противника/игрока на небольшое расстояние, если не нашел - поиск пути до вражеской базы.

null_device
16.12.2010, 13:17
ИМХО, надо делать на основе волнового алгоритма в 2 уровня - поиск противника/игрока на небольшое расстояние, если не нашел - поиск пути до вражеской базы.

Такой способ требует много памяти и машинного времяни. Намного логичнее использовать методы "поиска цели" и трассировки маршрута движения, детально описаный Copper Feet, для ЧВ..

Slesar
16.12.2010, 13:27
Гы, можно сделать респавнящегося через некоторое время танка-инженера. Неплохо бронированного, но безоружного. Он восстанавливает свою половину карты, если свой и чужую, если чужой. Игрок будет вынужден защищать его, чтоб восстановить свои укрепления и стараться уничтожить вражеского инженера.

---------- Post added at 13:27 ---------- Previous post was at 13:21 ----------

null_device, не видел, кинь ссылку, плз.

null_device
16.12.2010, 13:46
Разблюденно описано в ZF#6, тут (http://deep.webest.net/forum/11934/1/) более развернуто, и ссылки на похожие материалы..

Vovoi
23.12.2010, 16:03
Ааааа! PC-пользователи атакуют Spectrum!
Если у вас будет все необходимое железо, то вскоре придете к выводу, что полученное изделие получается похожим на IBM-PC. Появится мысль - зачем что-то там паяли и очень старались?
Интересной/играбельной может быть как текстовая бродилка, так и графическая Elite и многие другие. Вообще, имхо, на Спектруме нужна голова и желание, тогда ограничение в железе почти не почувствуется (да, согласен, с кассетой далеко не уехать, дисковод все-таки нужен, или HDD, лишь для того, чтобы сэкономить время на компиляцию/загрузку/отгрузку исходников).

Segfault
23.12.2010, 16:20
а можно и так предположить Если все железо будет то можно придти к выводу, что PC не обязательно включать сегодня ("потом включу..."), а оставшись тетатет со спеком возникнет вопрос/спрос "а где же новый софт". И "Надо написать!". Пара строчек на бейсике забытая раскладка клавы и вот уже начигачен "шедевр". Среди таких шедевристов начнется конкуренция и тогда руки у рук появится возможность привыкнуть к написанию прог/их юзанию, а не тупому флужению. А если и флудению то через браузер на спеке. Но тогда придется ресетать комп и все такое. И тут появится востребованность оси.. и тд.

null_device
23.12.2010, 16:24
Абсолютно согласен! Ибо эскалация производительности (в основном, железа) для корректной работы новых програмных продуктов - чисто коммерческий подход (который наблюдаетс в нише РС), по "выдавливанию" средств из конечного потребителя, т.е. нас с вами.
По-моему правильней было бы создавать программу под железо, а не наоборот. И использовать опционально, дополнительные возможности: больший обьем памяти, звуковые устройства, видео режимы и т.п., не забывая о потдержке "стандартной, минимальной комплектации".

zx-kit
23.12.2010, 19:29
Ааааа! PC-пользователи атакуют Spectrum!
Если у вас будет все необходимое железо, то вскоре придете к выводу, что полученное изделие получается похожим на IBM-PC. Появится мысль - зачем что-то там паяли и очень старались?

Про железо в этой теме писалось год назад. Теперь речь идет про программную часть. Мне пока это интересно, хотя почти ничего кроме схемы и принципа работы Спектрума я не знаю.


Интересной/играбельной может быть как текстовая бродилка, так и графическая Elite и многие другие.

Пока мне понравилась идея игры типа танчиков.


Вообще, имхо, на Спектруме нужна голова и желание, тогда ограничение в железе почти не почувствуется (да, согласен, с кассетой далеко не уехать, дисковод все-таки нужен, или HDD, лишь для того, чтобы сэкономить время на компиляцию/загрузку/отгрузку исходников).
Тут я не согласен. Мне для компиляции нужен компилятор и отладчик для PC. Как инструмент PC очень удобен и уже привычен.
Вот только какой компилятор и эмулятор посоветуете и где они лежат?

А пробные запуски можно делать на Speccy2007/2010.

Еще вопрос по звуку. Как сделать минимальный вариант звука выстрелов для бипера и AY?

moroz1999
24.12.2010, 02:54
Самый крутой компилятор - SJASM.
Сделай bat-файл, который запускает компиляцию нужного файла, а потом результат запускает в нужном эмуляторе - и будет очень удобно отлаживать.
В качестве эмулятора рекомендую Unreal - там крутой дебаггер.

shadwork
24.12.2010, 09:29
Вопрос многократно обсуждался, но все же выложу одну из возможных сборок. Собирал не я. Я это использовал для участия в AAAParty. Лежит по ссылке http://www.shadowsshot.ho.ua/others/ZXasmSciTE.rar. Будет лежать еще с недельку ;)

Это редактор SciTE плюс SjASM плюс Unreal. Распаковываем архив в любую папку и запускаем сам редактор SciTE.exe.
Файлы проекта складываем в папку Proj, сейчас там находится исходник атрибутного огня с именем flame.asm. Для запуска открываем этот файл, собираем проект из меню Tools\Собрать ( или нажимаем F7 ) и запускаем на выполнение Tools\Выполнить (или нажимаем F5). Запускается эмулятор Unreal и в нем начинает гореть огонь.
Список меток из исходного текста в Unreal не экспортируется, я отлаживал и без этого - но в принципе и это возможно.
Дополнительно в папке Book лежит дополнительная документация которая может помочь при разработке.

Andrew771
31.12.2010, 10:57
ИМХО, в наше время для ускорения и облегчения процесса разработки игр необходим компилятор C, Pascal или Basic на PC, который компилирует в машинные коды Спектрума. Возможно даже не в коды, а в текст ассемблера для дальнейшей ручной доводки. И этот компилятор должен содержать встроенные команды/библиотеки для работы с графикой, звуком, клавиатурой и т.д. Реализация команды/библиотек изначально должна быть написана и оптимизирована на ассемблере разработчиком компилятора. Я сейчас продумываю концепцию такого компилятора для Pascal.
Помнится, игры, которые я писал по полгода и так и не дописал на ассемблере Spectrum, на Delphi в PC я создавал за пару-тройку дней.
А программировать на голом ассемблере на голом Спектруме на голом энтузиазме сейчас очень мало желающих.

goodboy
31.12.2010, 11:07
ИМХО, в наше время для ускорения и облегчения процесса разработки игр необходим компилятор C, Pascal или Basic на PC, который компилирует в машинные коды Спектрума. Возможно даже не в коды, а в текст ассемблера для дальнейшей ручной доводки. И этот компилятор должен содержать встроенные команды/библиотеки для работы с графикой, звуком, клавиатурой и т.д. Реализация команды/библиотек изначально должна быть написана и оптимизирована на ассемблере разработчиком компилятора. Я сейчас продумываю концепцию такого компилятора для Pascal.

всё уже давно есть.
http://zx.pk.ru/showthread.php?t=3152&highlight=z88dk

Andrew771
31.12.2010, 15:05
всё уже давно есть.
Ого, круто! Тогда засяду изучать! Огромное спасибо!

Andrew771
11.01.2011, 15:47
Волновой метод... Такой способ требует много памяти и машинного времяни. Намного логичнее использовать методы "поиска цели" и трассировки маршрута движения, детально описаный Copper Feet, для ЧВ..

Нашел детальную открытую переписку В.Медноногова по этому поводу: http://pmg.org.ru/ai/raypath.zip

Вкратце быстрый алгоритм поиска пути таков (кому лень читать многабукафф):
1. Идем по прямой к цели.
2. Если наткнулись на препятствие, то переходим на п.3, иначе на п.1.
3. Считаем по периметру препятствия по часовой и против часовой стрелки (в двух направлениях), где меньше клеток для обхода, и запоминаем эти клетки. Последними клетками обхода считаются те, из которых можно двигаться по прямой к цели (последующие возможные препятствия пока не считаются).
4. Обходим препятствие по клеткам с минимальным обходом.
5. Переходим на п.1.

zx-kit
15.01.2011, 23:39
Название будущей игры:"FUTURE TANK"

Легенда.

После Эры Войн, когда было разрушено большинство городов Земли, наступила Эра Возрождения 2. Люди переселились в районы с теплым климатом, туда, где еще остались клочки живой природы. На остальной территории Земли были построены автоматические заводы для изготовления всего нужного для жизни и отдыха людей. Так как людям было нечего делать, они занялись поэзией, живописью, гимнастикой и другими видами искусства и спорта.

Но однажды, во время легкого землетрясения, недалеко от одного из городов-заводов провалился люк уцелевшего с Эры Войн секретного подземного бункера. Свет, попавший в бункер, запустил процесс расконсервации и подзарядки автономной боевой техники, ранее принадлежавшей одной из армий Земли.

Процесс этот занял достаточно много времени, так как сначала требовалось развернуть электростанции нескольких типов: солнечной, атомной и еще одного экспериментального типа.

Но, так как в городе никто из людей не жил, то пока обнаружили, что город-завод был перенастроен на выпуск новых экземпляров самоходных боевых установок прошло много времени. Армия, запрограммированная на уничтожение, направилась в сторону обжитых районов Земли.

Когда люди узнали об этой беде, ученые срочно занялись созданием боевой машины, способной противостоять древней технике. И они создали ее, но ресурсов хватило только для изготовления одного экземпляра. Справится ли танк будущего со своей миссией - покажет время...

--------------------------------------------------------------
Следующим этапом будет рисование спрайтов техники.
Предполагается размером около 16 x 16 точек со смещенным центром. Цвета 2-3 на спрайт.

Потом изучение способов отображения двужущихся с разной скоростью объектов.
Скорее всего после прерывания будет считываться из буфера адрес спрайта 8x8 точек в ОЗУ спрайтов и адрес в ОЗУ экрана, куда надо скопировать 8 байтов. Из другого буфера будут копироваться атрибуты.

Основное время будет затрачиваться на рассчет передвижения объектов, адресов в ОЗУ спрайтов и экрана, и запись их в буфер для быстрого копирования во время прерывания.

Потом эксперименты с ручным управлением танком.

Параллельно с техническими вопросами нужно будет разработать правила игры и алгоритмы передвижения противников.

Slesar
16.01.2011, 01:08
zst, Неплохая легенда, перекликается с сюжетом ПЦ-шной игры "Hostile Waters: The Antaeus Rising"

Andrew771
16.01.2011, 21:39
С ненаписанным Z тоже :)

Slesar
16.01.2011, 22:45
А еще - с книжкой Кира Булычева "Ржавый фельдмаршал".

Можно поэтому назвать аватару игрока АЛИСА - Адаптивная Левитационная Интеллектуальная Самоходная Артиллерия :)

В проставках между уровнями можно сделать диалоги боевой машины будущего и искусственного интеллекта базы, на уровне обмена мыслями о природе человеческой вражды, смысла существования самих этих машин. Еще можно каждый диалог заключать ходом шахматной партии - тогда в конце игры машина будущего поставит призраку войны мат :)

osa
16.01.2011, 23:26
мозг

zx-kit
17.01.2011, 09:04
ИМХО, начать стоит с выбора игровой механики, задать "правила игры". Для спектрума как для аркадной машины это важно. Механика и заданные в ней свободы игрока определят объем кодинга.

Экран Спектрума вводит ограничения по цвету, поэтому задача выбора механики движения упростилась. Объекты будут передвигаться в пределах одного экрана по-вертикали и по-горизонтали.


Потом надо выбрать сеттинг (игровые реалии, объекты, персонажей), продумать взаимодействие объектов.

Не хотелось бы, чтобы герой умирал от первого попадания в него и возвращался на 1 уровень. Поэтому, можно сделать защиту, которая принимает на себя первые несколько повреждений. Враги пусть будут без защиты или с защитой от одного вида оружия - их больше.
Вообще мне бы хотелось, чтобы можно было выбирать оружие.
Например, 9 видов оружия, 3 группы по 3. Отображать справа на экране ярким цветом выбранное оружие. 3 группы - 3 вида энергии.
Еще надо решить вопрос подзарядки защиты и оружия - собирать или оно само постепенно должно восстанавливаться.

Предполагается, что вражеские объеты - танки (двигаются медленно, могут ехать по мелким препятствиям) и БТР (могут ехать только по ровной дороге, но быстрее).
Главный герой - машина на антигравах (можете ездить быстро даже по мелким припятствияи и через ямы).


Потом написать сценарий (внятно объяснить смысл действия, его предпосылки, развязку, реплики персонажей).

С этим сложнее - нужна помощь. Графика - это проекция сюжета на экран монитора/телевизора. ELITE была интересна сюжетом при упрощенной графике на экране.

Скорее всего нужны разные миссии типа:
1. Продержаться 2 минуты и не умереть.
2. Нейтрализовать за 5 минут 25 объектов.
3. Сопровождать какой-нибудь объект типа транспорта с продуктами, пока он едет по заданному пути.
...



Потом нарисовать графику (задники, спрайты, заставки).

Пытаюсь наприсовать цветные спрайты, пока на бумаге в клеточку.


Потом написать музыку (скажу по себе - качество звукового сопровождения во многом определяет впечатление от игры).
А потом - кодить, кодить, кодить...
Пока не знаю как делать звук.

---------- Post added at 11:04 ---------- Previous post was at 10:41 ----------

Наверно нужно писать сценарий для каждого экрана с учетом размера игрового поля, типов препятствий, скорости движения и т.д.

Например, на некоторых уровнях можно разместить препятствия, которые не уничтожаются оружием. Чтобы временно оно опустилось надо нажать кнопку. При этом нужно учитывать в сценарии расстояние от кнопки до открывающегося прохода - чтобы можно было успеть.
Кроме этого, нужно расписать - когда и где появляется очередной враг и с какими характеристиками. Тут нужно сделать так чтобы пройти уровень было и не просто и не слоожно, но не с первого раза...

Slesar
17.01.2011, 09:20
Не хотелось бы, чтобы герой умирал от первого попадания в него и возвращался на 1 уровень. Поэтому, можно сделать защиту, которая принимает на себя первые несколько повреждений. Враги пусть будут без защиты или с защитой от одного вида оружия - их больше.
Вообще мне бы хотелось, чтобы можно было выбирать оружие.
Например, 9 видов оружия, 3 группы по 3. Отображать справа на экране ярким цветом выбранное оружие. 3 группы - 3 вида энергии.
Еще надо решить вопрос подзарядки защиты и оружия - собирать или оно само постепенно должно восстанавливаться.

Имхо, здоровье (щит) при таком соотношении сил должно состоять из нескольких единиц и постепенно регенерировать, иначе аптечек не наберешься.
Оружие лучше сделать заряжаемым у соответствующей электростанции. Тогда на каждой карте будет 3 ключевые точки разной важности, в зависимости от типа танков.
При трех индикаторах оружия их лучше, наверное, сделать цифровыми и поставить сбоку по вертикали.


3. Сопровождать какой-нибудь объект типа транспорта с продуктами, пока он едет по заданному пути.
Мне думается, что один экран маловат, чтоб проложить мало-мальски длинную дорогу в 2 танчика шириной (чтоб была возможность защищать со всех сторон). Либо надо очень замедлить транспортник.


Предполагается, что вражеские объеты - танки (двигаются медленно, могут ехать по мелким препятствиям) и БТР (могут ехать только по ровной дороге, но быстрее).
Главный герой - машина на антигравах (можете ездить быстро даже по мелким припятствияи и через ямы).
Подходяще, так игрок сможет использовать разницу возможностей для построения тактики игры. Надо учесть это на карте (сделать водные преграды, расстреливаемые обломки, нерасстреливаемые корпуса базы и скалы). Интересно может быть, если сделать сарайчик 16х16, в который игрок может заехать и таким образом скрыться на время от проезжающего танка.

osa
17.01.2011, 09:30
а вставка вертикального сролинга экрана сильно повлияет на сложность проекта?

---------- Post added at 09:30 ---------- Previous post was at 09:29 ----------

для миссия типа сопровождения было бы замечательно.

Slesar
17.01.2011, 10:08
Навскидку придумал еще один тип миссии, на механике Пакмана:
За игроком по карте гоняется один-единственный танчик-босс, неуязвимый для всех типов оружия, кроме одного. Но, как назло, именно это оружие у игрока неактивно. По карте разбросаны обломки. Если их расстреливать, то под некоторыми возникают части оружия. Надо собрать 3 части оружия и расстрелять босса.

zx-kit
17.01.2011, 10:49
Навскидку придумал еще один тип миссии, на механике Пакмана:
За игроком по карте гоняется один-единственный танчик-босс, неуязвимый для всех типов оружия, кроме одного. Но, как назло, именно это оружие у игрока неактивно. По карте разбросаны обломки. Если их расстреливать, то под некоторыми возникают части оружия. Надо собрать 3 части оружия и расстрелять босса.
Да, это было бы интересно для разнообразия.

А как вам возможность записи демы прохождения уровня ?
Ну типа записать когда и какие клавишы были нажаты и чтобы компьютер эту последовательность обрабатывал так же как и реальное нажатие. Наверно тут основная проблема в размере этого файла.

---------- Post added at 12:49 ---------- Previous post was at 12:45 ----------


а вставка вертикального сролинга экрана сильно повлияет на сложность проекта?
для миссия типа сопровождения было бы замечательно.
Пока не знаю.
Нужно будет решить как отображать большую карту на игровое поле, когда будет включаться скроллинг, на сколько точек зараз делать скроллинг (самый простой на 8).
Скорее всего плавности не будет.
Еще возможное количество врагов увеличится - как ими всеми управлять?

Slesar
17.01.2011, 11:16
А как вам возможность записи демы прохождения уровня ?
Ну типа записать когда и какие клавишы были нажаты и чтобы компьютер эту последовательность обрабатывал так же как и реальное нажатие. Наверно тут основная проблема в размере этого файла.
Здорово.


Скорее всего плавности не будет.
А ее и не надо - сделать перемещение в момент перехода транспортом границы экрана. На целый экран вверх или чуть меньше.


Еще возможное количество врагов увеличится - как ими всеми управлять?
Разграничить поле непреодолимыми для врагов преградами (волны нападения) и забивать на невидимых врагов (бо они нас уже не достанут).

---------- Post added at 12:16 ---------- Previous post was at 12:14 ----------

Или тормозить транспорт при каждой волне танков, пока они все не будут уничтожены.

null_device
17.01.2011, 11:32
Если ландшафт будет появляться целыми локациями (экранами), можно взять внешний вид и "механику" tankodrom'а.


как ими всеми управлять?

Логичнее, пока вражеские юниты не видны на игровом экране, они "не активны", при "входе" в локацию, пытаются "сравнять" координату Y\X с вашей и выстрелить (возможны варианты :) ).
Если имеет место "приемущественное" направление прохождения уровня (горизонталь\вертикаль), имеет смысл выставить "порог срабатывания", т.е. минимальной дистанции, при преближении к которой, вражеские юниты "включаются".

osa
17.01.2011, 14:49
Или тормозить транспорт при каждой волне танков, пока они все не будут уничтожены.
транспорт медленно движется по дороге и застывает в центре пока не уничтожена вся волна дальше не двигается.
Транспорт пугается и едет в некоторое укрытие, где стоит и ждет. противнику видно, где стоит транспорт
Транспорт пугается и едет за пределы экрана, оставляя игрока наедине.
Если транспорт на границе, то можно покинуть локацию, не убивая всех. поведение рандомно.
?

---------- Post added at 14:43 ---------- Previous post was at 14:40 ----------

транспорт уезжает за пределы экрана, игрок за ним, на следующем стоит у препятствия и просит помощь. игрок подъезжает, а транспорт превращается в легкий БТР:)

---------- Post added at 14:44 ---------- Previous post was at 14:43 ----------

после победы транспорт приезжает из предыдущего экрана.

---------- Post added at 14:49 ---------- Previous post was at 14:44 ----------

ну и транспорт тупо едет без противников

zx-kit
17.01.2011, 14:52
...А еще - с книжкой Кира Булычева "Ржавый фельдмаршал".

Можно поэтому назвать аватару игрока АЛИСА - Адаптивная Левитационная Интеллектуальная Самоходная Артиллерия :)

А еще с фильмом "Пираньи".
После небольшого землетрясения возникла трещина на дне озера, куда приехала купаться молодежь на ежегодный праздник. Под озером было еще одно озеро, в котором жил вид рыбы, которая уже давно вымерла в наземных озерах. Более быстрый молодняк выплыл наружу и стал уничтожать все живое.

Шериф предупредил, чтобы все вылезли из воды. Но не сказал, что конкретно произошло. Кто не послушался - того съели пираньи.
C ними научились бороться с помощью ружей, электрошокера, мотора от моторной лодки, глушили с помощью взрыва лодок. Спрособов много. В конце-концов наши победили. Но это оказались лишь мальки...

Slesar
17.01.2011, 15:43
Я вот думаю - спрайт 24х24 получится детализованнее, причем, в данном случае это скажется и на детализации карты тоже.
Какая сетка лучше?
24066
24067

osa
17.01.2011, 17:20
16х16

---------- Post added at 17:20 ---------- Previous post was at 17:15 ----------

24 слишком крупно на мой взгляд

Slesar
17.01.2011, 17:28
В 16 получаются весьма условные элементы. Мне кажется, при толковом дизайне карт + переход в соседние сегменты 24 будет выигрышнее.

osa
17.01.2011, 20:34
насчет оружия... 9 много, 3-4 хватит: обычный, одиночный усиленный, двойной(шире, мощность как у одиночного усиленного), тройной(еще шире).

---------- Post added at 20:34 ---------- Previous post was at 20:26 ----------

кстати, возможно стоит почерпнуть идей тут?
http://www.ag.ru/reviews/tank_o_box

Slesar
17.01.2011, 21:44
Вариант:
фугасный снаряд: отклоняется электромагнитными щитами, плохо пробивает броню, поражает более 1 клетки (для обстрела БТР-ов).
Плазменная граната: отражается электромагнитными щитами, прожигает броню. Для обстрела тяжелых танков.
Электромагнитная бомба: Уничтожает щиты, против брони неэффективна. Для обстрела танков-штурмовиков.
Серая слизь: снаряд, начиненный микродизассемблерами. Действует не сразу, но гарантированно фатален.
Тактический ядерный боеприпас: Зловещий артефакт из прошлого. Очень редко можно найти в обломках на базе. Большой вес не позволяет стрелять прямой наводкой, а только по параболе. Имеет площадной эффект.

osa
17.01.2011, 21:53
тогда фугас жрет броню, но убавляет немного и щиты, а электромагнитная наоборот, мало ли кончатся заряды:)

---------- Post added at 21:53 ---------- Previous post was at 21:47 ----------

ну и для боссов режим пакмана, спейс инвайдерс и прочие тени прошлого:)

zx-kit
18.01.2011, 00:27
Вот первая попытка нарисовать спрайты в программе GraphicsGale (http://www.humanbalance.net/gale/us/)

http://s013.radikal.ru/i325/1101/78/eb538af423e0t.jpg (http://s013.radikal.ru/i325/1101/78/eb538af423e0.bmp)

Прикрепленный архив - движущийся спрайт.

Сверху изображен самый большой объект на гусеницах 16x16 точек. Если использовать три цвета, то один цвет - гусеницы/колеса и два цвета на корпус. Корпус может состоять из двух однотонных прямоугольников.
Если только два цвета, то один цвет - гусеницы/колеса, другой цвет - корпус (плюс возможны черные линии и точки.

Предполагается, что враги, в основном, будут двухцветные и помельче, а герой - трехцветный.
У врагов нужно нарисовать дуло, так как они могут стрелять только вперед. Главный герой может стрелять в любую из четырех сторон не меняя направления движения. Поэтому дуло ему не нужно.

Какие цвета гусениц, колес, корпусов лучше выбрать? Так как есть ограничение на цвет - в одной клетке не более двух цветов - колеса/гусеницы у всех объектов должны быть одного цвета.

Как сделать цвета Спектрума в программе GraphicsGale и преобразовать в спрайты Спектрума пока не знаю.

zx-kit
18.01.2011, 01:10
Вариант:
фугасный снаряд: отклоняется электромагнитными щитами, плохо пробивает броню, поражает более 1 клетки (для обстрела БТР-ов).
Плазменная граната: отражается электромагнитными щитами, прожигает броню. Для обстрела тяжелых танков.
Электромагнитная бомба: Уничтожает щиты, против брони неэффективна. Для обстрела танков-штурмовиков.
Серая слизь: снаряд, начиненный микродизассемблерами. Действует не сразу, но гарантированно фатален.
Тактический ядерный боеприпас: Зловещий артефакт из прошлого. Очень редко можно найти в обломках на базе. Большой вес не позволяет стрелять прямой наводкой, а только по параболе. Имеет площадной эффект.

Я предполагал типа как в DOOM2: энергия общая, а размер заряда и повреждения разные.
Например, очередь из синих квадратиков мало тратит, а если пальнуть из зеленого BFG, то полного заряда хватит на два выстрела. Зато пол-экрана одноклеточных объектов в пределах прямой видимости можно уничтожить. Или, например, окружают со всех сторон - тогда что-то типа NOVA из DIABLO - голубое разбегающееся кольцо/квадрат молний. Или третье электрическое оружие - например, красный лазер.

Также и с оружием огня - можно использовать FIREBALL/огнемет/кольцо огня

Slesar
18.01.2011, 10:50
энергия общая
Я бы все-таки заюзал тот факт, что задумано 3 типа энергостанций. Расширяет тактическую составляющую

---------- Post added at 11:50 ---------- Previous post was at 11:48 ----------


Поэтому дуло ему не нужно.
Дуло очень нужно, иначе будет непонятно, чем оно стреляет (не из дырки же для ружья), да и на танк будет непохоже.

zx-kit
18.01.2011, 11:22
Я бы все-таки заюзал тот факт, что задумано 3 типа энергостанций. Расширяет тактическую составляющую

Почему бы нет. Если энергия тратится на защиту и оружие ее надо где-то брать. Самое главное сбалансировать общий заряд, затраты на защиту при попадании, затраты энергии на каждый выстрел и т. п.



Дуло очень нужно, иначе будет непонятно, чем оно стреляет (не из дырки же для ружья),

Тогда корпус нужно сделать одноцветным с черными точками, которыми можно нарисовать дуло. Есть какие-нибудь предложения по внешнему виду корпуса размером 8х16 точек максимум? Два цвета, один из них - черный.

да и на танк будет непохоже.
В принципе оно и не должно очень быть похоже на танк.
На танки должны быть похожи враги.

Slesar
18.01.2011, 11:43
zst, мож так?24094
черные точки на хвосте имитируют раскраску опасной техники.

Slesar
18.01.2011, 12:04
Вариант корпуса 16х162409524097

zx-kit
18.01.2011, 12:35
Все-таки колеса/антигравы нужно сделать другого цвета иначе все будет однотонное.

В корпус 8х16 или короче тогда надо будет втиснуть башню, которую можно будет поворачивать на 360 градусов. Например кружок размером 8x8 и с одной стороны прорезь или черное пятнышко, снаряд все равно будет изображаться вне спрайта объекта. Конечно, понятнее, когда видно куда башня повернута. Но если не получится - тогда двухцветный корпус без башни.

Наверно надо, чтобы по цвету врагов можно было определить, какой энергией они пользуются для защиты и оружия.

Slesar
18.01.2011, 12:50
Наверно надо, чтобы по цвету врагов можно было определить, какой энергией они пользуются для защиты и оружия.
Точно.


В корпус 8х16 или короче тогда надо будет втиснуть башню, которую можно будет поворачивать на 360 градусов.
А зачем? Можно сделать неподвижный ствол и вращать спрайт целиком в сторону стрельбы. Машина-то на антигравах, она вполне может ехать боком и задом, ей все равно.

---------- Post added at 13:50 ---------- Previous post was at 13:46 ----------


Все-таки колеса/антигравы нужно сделать другого цвета иначе все будет однотонное.

Я что-то слабо представляю. В спрайте 4 знакоместа, в каждом из которых может быть только по 2 цвета, один из них черный. Максимум можно сделать перед одного цвета, а зад другого, или шахматную раскраску.

zx-kit
18.01.2011, 13:12
Я что-то слабо представляю. В спрайте 4 знакоместа, в каждом из которых может быть только по 2 цвета, один из них черный. Максимум можно сделать перед одного цвета, а зад другого, или шахматную раскраску.
Я предлагаю сделать спрайт размером 16х16 точек, но занимать он будет 6 или 9 знакомест:
123
456
789

Корпус занимает знакоместа 4,5,6.
Гусеницы, колеса, антигравы занимают по пол-знакоместа 1,2,3,7,8,9. То есть у них свой цвет+черный.

Slesar
18.01.2011, 13:16
А-а-а...:v2_dizzy_yes:

Slesar
18.01.2011, 15:41
Концепт :)
2411024111
2411224113

Лас
18.01.2011, 16:21
Концепт :)
2411024111
2411224113
Женица вам надобно, барин.

zx-kit
18.01.2011, 17:05
Женица вам надобно, барин.

Вот и программисты подтягиваются.
Как нам из этих рисунков спрайтов наделать и заставок ?

А что - хороший летающий танк получился. До чего дошел прогресс...

Лас
18.01.2011, 23:22
Вот и программисты подтягиваются.
C юбилеем.
http://img39.imageshack_.us/img39/2388/zst1000.jpg

zx-kit
19.01.2011, 19:56
C юбилеем.
http://img39.imageshack_.us/img39/2388/zst1000.jpg

Стареем, стареем ...

Andrew771
03.04.2011, 21:49
Нашел детальную открытую переписку В.Медноногова по этому поводу: http://pmg.org.ru/ai/raypath.zip

Вкратце быстрый алгоритм поиска пути таков (кому лень читать многабукафф):
1. Идем по прямой к цели.
2. Если наткнулись на препятствие, то переходим на п.3, иначе на п.1.
3. Считаем по периметру препятствия по часовой и против часовой стрелки (в двух направлениях), где меньше клеток для обхода, и запоминаем эти клетки. Последними клетками обхода считаются те, из которых можно двигаться по прямой к цели (последующие возможные препятствия пока не считаются).
4. Обходим препятствие по клеткам с минимальным обходом.
5. Переходим на п.1.
Вспомнил вот, решил написать...
Когда в 2000 г. я начал писать для Спектрума RTS (надеюсь, напишу ее), то алгоритм поиска пути делал тоже без полного просчитывания пути, чтобы максимально сэкономить время просчета и память. Он еще быстрее медноноговского, но маршрут может быть хуже, если препятствия протяженные. Тем не менее, в итоге юнит придет в нужную точку. Вот такой он:

1. Идем по прямой к цели (обе координаты горизонтальная и вертикальная сближаются с целью), запоминаем последние 6 клеток, через которые прошли, в буфер.
2. Если наткнулись на препятствие, то идем на клетку, чтобы хотя бы одна координата - горизонтальная или вертикальная сближались с целью. При этом не заходя ни на одну из 6 последних запомненных клеток в буфере. Продолжаем запоминать 6 последних клеток в буфер.
3. Если невозможно идти в условии п.2, то идем на любую соседнюю случайную клетку, которой нет в буфере. Продолжаем запоминать 6 последних клеток в буфер.
4. Если невозможно идти в условии п.3, то идем на любую соседнюю случайную клетку, которая есть в буфере, кроме той, где были на прошлом ходу. При этом в буфере запомненных клеток удаляем клетки, из которых пришли на текущую клетку в прошлый раз.
5. Переходим на п.1, пока не достигли цели.

Проверял, работает. Правда, приходится для каждого юнита хранить буфер 6 клеток (можно не сами координаты клеток, а смещение до них от текущей в 2-3 битах). Буфер можно увеличить/уменьшить в зависимости от размера и изрезанности предполагаемых препятствий.

zx-kit
15.07.2013, 20:30
Подумываю продолжить разработку игры. Если игровое поле больше, чем один экран, в какой момент обычно делают передвижение экрана ? Для игры типа танчики.

Crash Nicker
15.07.2013, 22:18
Подумываю продолжить разработку игры. Если игровое поле больше, чем один экран, в какой момент обычно делают передвижение экрана ? Для игры типа танчики.

Ну, такое обычно применяется не только для "огроменных" танчиков, а и для игр-платформеров в духе... кхем, ладно, со скроллом. Тут два варианта:

1) Поэкранный скролл. Тут всё просто: заехали за край экрана - скролл до тех пор, пока другой экран не покажется полностью.
2) "Гоняющийся" скролл, он же chasecam. Схема такая: в середине квадрата, представляющим собой "рабочую" зону игры, рисуется ещё один воображаемый квадрат. Не даём нашему танку за него выехать, не считая тех случаев, когда мы на границе карты. И кстати, делать этот воображаемый квадрат настолько же большим, как и окошко с геймплеем - ну очень плохая тенденция, я даже не буду рассказывать, почему. :)

zx-kit
16.07.2013, 05:52
2) "Гоняющийся" скролл, он же chasecam. Схема такая: в середине квадрата, представляющим собой "рабочую" зону игры, рисуется ещё один воображаемый квадрат. Не даём нашему танку за него выехать, не считая тех случаев, когда мы на границе карты. И кстати, делать этот воображаемый квадрат настолько же большим, как и окошко с геймплеем - ну очень плохая тенденция, я даже не буду рассказывать, почему. :)
Допустим окно геймплея 190x190 точек. Посередине воображаемый квадрат размером 100х100 точек, в котором танк может ездить без скролла экрана ? Если же он пытается выехать за этот квадрат, то экран сдвигается на... сколько ? С какой скоростью ? Как себя должны вести в это время все объекты на экране (двигаться или замереть)? Реагирует ли игра на клавиатуру или джойстик во время скролла экрана ? Какое положение танка должно быть после окончания скроллига? Список игр с таким скроллингом на World Of Spectrum можете перечислить ?

goodboy
16.07.2013, 08:57
Список игр с таким скроллингом на World Of Spectrum можете перечислить ?
Vindicators ? http://www.worldofspectrum.org/infoseekid.cgi?id=0005581

scl^mc
16.07.2013, 10:26
С какой скоростью ? Как себя должны вести в это время все объекты на экране (двигаться или замереть)? Реагирует ли игра на клавиатуру или джойстик во время скролла экрана ?
-со скоростью движения "танчика";
-двигаться;
-реагирует

Slesar
16.07.2013, 14:41
Танк наезжает на крайний ряд сетки - экран смещается на х-1 клеток, где х - ширина экрана. При этом все останавливается.

Crash Nicker
16.07.2013, 16:11
Допустим окно геймплея 190x190 точек. Посередине воображаемый квадрат размером 100х100 точек, в котором танк может ездить без скролла экрана ?

Да-с.


Если же он пытается выехать за этот квадрат, то экран сдвигается на... сколько ? С какой скоростью ? Как себя должны вести в это время все объекты на экране (двигаться или замереть)? Реагирует ли игра на клавиатуру или джойстик во время скролла экрана ?

Открою секрет Полишинеля. При "живом скроллинге" враги и инпут не должны замораживаться ВООБЩЕ. Первое - потому, что всю игру можно пройти, никого не убив (ибо все враги стоят истуканами), а это тупо. Второе - потому, что куда проще удерживать кнопку "вверх", чтобы наверх и идти без остановок, а не долбить её раз по триста. Что ещё более тупо.

Ну, тут можно пойти одним из двух путей:
* Ikari Warriors - скроллинг попиксельный, специально для игр, которые сплошь и рядом ч/б. Если скролл идёт либо только по горизонтали, либо только по вертикали, можно траву, море и песок отделить своими цветами. Более затратный с точки зрения тактов.
* Savage и другие игры от Дэйва Перри - скроллинг атрибутный, ибо вся графика тут цветастая и разукрашенная. :) Разумеется, все объекты (все) на экране передвигаются в пределах знакомест. Можно и для ч/б применять, благо это экономно с точки зрения ресурсов, чем скроллить медленно и плавненько...

Или скомбинировать их вот так:
* Чёрный Ворон - спрайты движутся попиксельно, а вот экран - поатрибутно...
* Игры от The Mojon Twins - ...ну или поэкранно, пардон за каламбур.


Какое положение танка должно быть после окончания скроллига?
Ну, поскольку мы не выезжаем за эти 100х100, то, вестимо, внутри этого квадрата; причём в какую сторону ехали, в такую и смотрим...

zx-kit
16.07.2013, 18:28
Спасибо. Понял, что пока танк пытается выйти из внутреннего квадрата, он как бы буксует на месте, а фон едет мимо него. Как только он остановится - сразу же остановится и фон.

Появилась идея собрать библиотеку из простых подпрограмм на ассемблере SJASM. Чтобы каждый раз не изобретать велосипед. Можно создать шаблон игры, в который включить:

Блок определений - EQU
Блок переменных- DB, DW
Начальные команды - установку стека, режима прерываний и т.п.
Опрос направления движения джойстика или клавиатуры в зависимости от выбранного устройства.
Вывод звука на BEEPER.
Вывод звука на AY/YM.
Подпрограмму обработки прерывания.
Другие полезные подпрограммы.


Также пригодятся настройки ассемблера и эмулятора для быстрой компиляции и запуска результатов работы. Лучше несколько вариантов.

Я все это соберу в виде ссылок в первом посту. Могу добавить комментариев для потомков, но лучше вы сами напишите, чтобы я не ошибся, и укажите автора в шапке своей подпрограммы.

Как вы относитесь к созданию такой библиотеки?

Crash Nicker
16.07.2013, 20:03
Как вы относитесь к созданию такой библиотеки?

Да чего там, положительно, в принципе. Правда, я в АСМе, к сожалению, ни разу не шарю. :(

Alex Rider
16.07.2013, 21:45
Как вы относитесь к созданию такой библиотеки?
Я быо бы не прочь (особенно, если тему прибить в разделе), но все такие идеи убивались апстену тысячи раз. Почему-то не приживаются библиотеки, все все равно используют свое. Могу выдвинуть гипотезу - часто разобраться в написанном сложнее, чем написать самому. Наверно, по этой причине я не использую библиотеки (даже свои собственные). Поэтому, если уж делать, то с комментариями, где все разжевано от души.

introspec
16.07.2013, 22:10
Почему-то не приживаются библиотеки, все все равно используют свое. Могу выдвинуть гипотезу - часто разобраться в написанном сложнее, чем написать самому.
Всё даже проще. Если хочется хороший софт на спектруме - он должен работать всегда на пределе возможностей машины. Т.е., обычно не игры делают из библиотечных скроллов, а скроллы, всякий раз новые, подгоняются под конкретный дизайн игры, чтобы максимально оживить данную конфигурацию экрана и позволить побольше спрайтов и тайлов. Ну, или, если рождалась какая-то новая техническая идея, как скроллить побольше и поживее, делали дизайн игры под техническую идею. Это не от хорошей жизни происходило, но это так.

jerri
17.07.2013, 10:06
Допустим окно геймплея 190x190 точек. Посередине воображаемый квадрат размером 100х100 точек, в котором танк может ездить без скролла экрана ? Если же он пытается выехать за этот квадрат, то экран сдвигается на... сколько ? С какой скоростью ? Как себя должны вести в это время все объекты на экране (двигаться или замереть)? Реагирует ли игра на клавиатуру или джойстик во время скролла экрана ? Какое положение танка должно быть после окончания скроллига? Список игр с таким скроллингом на World Of Spectrum можете перечислить ?

вот например танк едет влево
http://www.zx.pk.ru/attachment.php?attachmentid=42472&stc=1&d=1374040566
доезжает до края активного окна - экран скролится вправо так чтобы танк оказался максимально справа.
вот так
http://www.zx.pk.ru/attachment.php?attachmentid=42473&stc=1&d=1374040566
в момент скролла все стоят никто не двигается.
так сделано в игре impossamole (http://www.worldofspectrum.org/infoseekid.cgi?id=0002460) например

другой вариант - как в игре сатан (http://www.worldofspectrum.org/infoseekid.cgi?id=0004344)
есть герой - его идеальные координаты 10,15
его текущая координата например 8,20

программа вычисляет разницу -2, 5
и прибавляет 1/10 от этой разницы к текущему положению камеры
так получается что чем ближе герой к краю экрана тем быстрее движется экран пытаясь вернуть героя в центр.

Alex Rider
17.07.2013, 11:44
Если хочется хороший софт на спектруме - он должен работать всегда на пределе возможностей машины.
Так оно бывает далеко не всегда. Да, графика - наибоее критичное место, грайические процедуры как правило пишутся разработчиком с нуля. Но есть еще куча всякого "сервисного" кода, который я переписываю каждый раз. Например: установка прерывания, инициализация музыки, дисковые операции, загрузка и запуск мелодии в GS, вывод меню, математика, тысячи их...

zx-kit
17.07.2013, 21:22
Так оно бывает далеко не всегда. Да, графика - наибоее критичное место, грайические процедуры как правило пишутся разработчиком с нуля. Но есть еще куча всякого "сервисного" кода, который я переписываю каждый раз. Например: установка прерывания, инициализация музыки, дисковые операции, загрузка и запуск мелодии в GS, вывод меню, математика, тысячи их...
Некоторые подпрограммы можно стандартизировать, например, в меню выбор джойстика во всех новых играх можно сделать одинаковым и это мало повлияет на играбельность игры. Это даже лучше - однообразные движения при выборе, одни и те же номера даже полезны. А вот разнообразие в выборе джойстика и запуске игры, например, как сделано в игре TRANTOR, скорее плохо, так как усложняет вроде не очень важную операцию в игре. Более дружественные игры запускаются сразу после нажатия кнопки FIRE.

Поэтому такие процедуры, которые без особого ущерба можно повторять во многих играх лучше задокументировать и собрать в базу. Новички в разработке игр смогут вначале использовать примеры опытных программистов без изменений, потом дорабатывать их под себя, а потом и напишут свои собственные. Мы же должны собрать удачные варианты подпрограмм, 1-3 варианта на каждую задачу. Лучше, чтобы они были короткими и с комментариями.

Для начала нужно собрать файлы конфигурации ассемблера и эмулятора - самые быстрые и удобные варианты для режима 48К. Потом конфигурации для более развитого железа. Чтобы все желающие писать программы могли легко начать творить и пробовать, а не искать по всему форуму и не спрашивать у других.

Можно собрать несколько вариантов шрифтов с русскими буквами. Лучше, чтобы кодировка была как в WINDOWS для упрощения программирования вывода текста. Потом быстрые подпрограммы вывода текста. Тогда начинающим программистам не придется тратить время и нервы для оптимизации этих вспомогательных подпрограмм. Все усилия лучше тратить на сам игровой процесс.

Потом коллекцию простых звуковых эффектов, спрайтов для начала, чтобы не надо было все делать с нуля

---------- Post added at 22:22 ---------- Previous post was at 21:43 ----------


вот например танк едет влево доезжает до края активного окна - экран скролится вправо так чтобы танк оказался максимально справа. В момент скролла все стоят никто не двигается..

Тоже хороший вариант, только лучше, чтобы движение начиналось у края внутреннего квадрата. После этого все замирают и все быстро сдвигается на пол-экрана. Потом все оживают и танк тоже может ехать дальше.

Спасибо. Уже несколько интересных вариантов перечислено - надо будет пробовать.

Alex Rider
17.07.2013, 21:55
Все это здорово. Только надо сделать либо в местной Wiki, либо на отдельном сайте. В первом посту темы собирать - не дело. Если оно будет собираться, я готов делиться откомментированными процедурами. Опять же, будет контент, есть смысл прибить тему (возможно, в "Программировании").

zx-kit
17.07.2013, 22:01
Все это здорово. Только надо сделать либо в местной Wiki, либо на отдельном сайте. В первом посту темы собирать - не дело. Если оно будет собираться, я готов делиться откомментированными процедурами. Опять же, будет контент, есть смысл прибить тему (возможно, в "Программировании").
Для начала можно делать вложения по всей теме, а я в первом посту буду делать ссылки. Посмотрите примерно как - уже есть в первом посту.

Например:
Шрифты с русскими буквами: 1, 2, 3.
Процедуры печати букв: 1, 2, 3.

Slesar
18.07.2013, 10:48
Тоже хороший вариант, только лучше, чтобы движение начиналось у края внутреннего квадрата. После этого все замирают и все быстро сдвигается на пол-экрана. Потом все оживают и танк тоже может ехать дальше.
Есть еще такая вещь как на тупой машине минимизировать подгрузки. Чем больше подгружается за раз, тем реже придется перерисовывать. В идеальном случае - целый экран, в реале - нужен еще краешек в одну клетку, чтоб игрок не терял ориентацию.

Alex Rider
18.07.2013, 11:58
Для начала можно делать вложения по всей теме, а я в первом посту буду делать ссылки. Посмотрите примерно как - уже есть в первом посту.
Плохо структурировать так. Получится громадный пост или куча спойлеров. Ты же хочешь большую коллекцию, верно?

goodboy
18.07.2013, 13:51
Более дружественные игры запускаются сразу после нажатия кнопки FIRE. а мне такой вариант совсем не нравится,
поскольку в играх нет стандарта на раскладку кнопок.
хотя обычно подразумевается Q,A,O,P,SPACE/M или Z,X,K,M,SPACE.
лучше давать пользователю переназначение клавиш для управления
ещё часто встречается pause-H,abort-G
а самая грубая ошибка когда подразумевается наличие kempston joystick`a по дефолту.

zx-kit
18.07.2013, 18:49
Плохо структурировать так. Получится громадный пост или куча спойлеров. Ты же хочешь большую коллекцию, верно?
На мой взгляд сто строк в первом посту не так уж и много. Зато удобно и все в одном месте.
У меня есть сайт www.z80a.ru - можно туда складывать...

---------- Post added at 19:49 ---------- Previous post was at 19:40 ----------


а мне такой вариант совсем не нравится,
поскольку в играх нет стандарта на раскладку кнопок.
хотя обычно подразумевается Q,A,O,P,SPACE/M или Z,X,K,M,SPACE.
лучше давать пользователю переназначение клавиш для управления
ещё часто встречается pause-H,abort-G
а самая грубая ошибка когда подразумевается наличие kempston joystick`a по дефолту.
Я имел ввиду, что в некоторых играх для начала игры нужно нажать 0, а это на SINCLAIR - джойстике. Удобно тем, что клавиатуру не надо нажимать каждый раз. Хотя лучше расставить все джойстики по порядку, например:
1. SINCLAIR 1
2. SINCLAIR 2
3. KEMPSTON
4. REDIFINE KEYS
0 или SPACE - START
P - PAUSE

Номера джойстиков (www.z80a.ru/000.txt)

Уточнить кнопки, сделать стандартное меню для такого случая и больше не менять и время на это не тратить. Уже половина игры будет готова. Останется самую малость - спроектировать уровни и двигать объекты в соответствии со сценаирием и алгоритмом...

zx-kit
18.07.2013, 21:26
Хранение библиотеки подпрограмм на сайте.

Можно временно выкладывать файлы в этой теме. Потом почистим. Каждая подпрограмма должна быть в отдельном текстовом файле, в виде пригодном для копирования в основной файл программы на ассемблере. В одном посте влезает до 5 файлов. Файл должен быть заархивирован в формат zip. Архивы нумеруйте по дате и номеру файла в этот день, например: 130718-01.zip, 130718-02.zip. В тексте поста напишите, что в каждом файле.

На страничке (http://www.z80a.ru/biblioteka-podprogramm) буду собирать подпрограммы по типу c указанием номеров файлов, например:

Шрифты с русскими буквами: 130718-01, 130721-01, 130721-02.

Такая нумерация обеспечит уникальность имен всех файлов и укоротит ссылки для их скачивания. Также по имени сразу видно, когда был создан архив. После разархивирования на компьютере начинающего программиста длинное имя файла восстановится.

Такой вариант хранения библиотеки устроит ?

Black Cat / Era CG
18.07.2013, 22:22
Архивы нумеруйте по дате и номеру файла в этот день
А ситуация, когда два человека в одно и то же время выкладывают файл? Имена одни и те же будут.

Hacker VBI
18.07.2013, 22:37
давайте добавим ещё время в имя файла.
так будет понятнее.
роботам :)

psb
18.07.2013, 22:51
мне страшно вмешиваться даже, но хотелось бы заметить, что давно придуманы такие вещи как svn/git. они решают очень много проблем, и никаких "что если 2 человека выкладывают" даже близко не возникает...

introspec
18.07.2013, 23:12
мне страшно вмешиваться даже, но хотелось бы заметить, что давно придуманы такие вещи как svn/git. они решают очень много проблем, и никаких "что если 2 человека выкладывают" даже близко не возникает...

Ну почему же, люди пытаются переизобрести всю историю игродизайна, а вы о каком-то там svn переживаете. Ширше нужно брать, обстоятельнее, амбизиознее.

drbars
19.07.2013, 00:03
Насколько я понмю, уже была попытка создать библиотеку демомейкера... ну там скоролл был и ещё что-то очень нужное :) Запись мнемоники там была весёлая, почти в строчку... ну чтобы непонятнее было :)

А что за игру то пишут в этом треде? Танчики что ли? Их уже навалом в 90ых понаделали...

Rindex
19.07.2013, 00:17
А что за игру то пишут в этом треде? Танчики что ли? Их уже навалом в 90ых понаделали...

Плюсую за последнюю фразу. Этой шняги и так уже навалом.

Crash Nicker
19.07.2013, 00:58
Плюсую за последнюю фразу. Этой шняги и так уже навалом.

А адекватных и вполне играбельных - штуки две. От силы. И то на одного игрока.

Но поскольку ещё и скролл местности, то что-то на уровне Great Tank точно намечается. Тоже не хит года, но Москва не сразу строилась...

Rindex
19.07.2013, 01:05
Crash Nicker, а вот каждый буржуйсккий игродел, считает за честь сделать JSW. По этому этих модов уже за сотню перевалило. Если делать игру, то что-нибудь конкретное, а не барахло. Survivisection, Alter Ego или Sea Dragon тому примеры. А если автор задумал сделать очередную реинкарнацию танчиков, то нафиг они не нужны.

psb
19.07.2013, 02:42
Ширше нужно брать, обстоятельнее, амбизиознее.
это еще страшнее... один только свн - был бы гигантский прогресс, серьезно.

introspec
19.07.2013, 02:57
это еще страшнее... один только свн - был бы гигантский прогресс, серьезно.
Я не понимаю, как можно серьёзно относиться к проекту "библиотеки для создания игр начинающими программистами", когда люди в проекте явно не слышали ни о AGD, ни о z88dk в связке с sp1. Одновременно с этим, предлагается писать бибиотеку со следующими "полезными" процедурами:
(*) Вывод звука на BEEPER.
(*) Вывод звука на AY/YM.
(*) Подпрограмму обработки прерывания.
(*) Другие полезные подпрограммы.
Это было бы дико смешно, если бы это не было так грустно. Уже один раз расподписался, но не удержался и прокомментировал. Сейчас расподпишусь ещё раз и больше сюда ни ногой.

zx-kit
19.07.2013, 05:40
Я не понимаю, как можно серьёзно относиться к проекту "библиотеки для создания игр начинающими программистами", когда люди в проекте явно не слышали ни о AGD, ни о z88dk в связке с sp1. Одновременно с этим, предлагается писать бибиотеку со следующими "полезными" процедурами:
(*) Вывод звука на BEEPER.
(*) Вывод звука на AY/YM.
(*) Подпрограмму обработки прерывания.
(*) Другие полезные подпрограммы.
Это было бы дико смешно, если бы это не было так грустно. Уже один раз расподписался, но не удержался и прокомментировал. Сейчас расподпишусь ещё раз и больше сюда ни ногой.
А что AGD позволяет написать любую игру?
1. Всего 12 спрайтов. Выводится по 6 спрайтов за фрейм. 9 - в новой версии. Какие типы игр можно написать с помощью этого ? Вы будете в них играть ? Шансов написать что-нибудь стоещее мало.
2. На ассемблере теперь уже никто не пишет ?

Если у кого-то хорошо получается писать на ассемблере - почему бы не научить этому других с помощью примеров и готовых подпрограмм ? Кроме этого предполагается собирать другую полезную информацию по созданию игр. Возможно все это приведет к небольшому увеличению написанных игр.

А неспошно разрабатываемая мной игра только помогает собрать всю эту полезную информацию.

Есть минимум 3 подхода в написании игр:
1. Использовать AGD или подобные программы. Недостаток - низкая скорость и мало свободы.
2. Писать все заново с нуля на основе принципа работы ZX SPECTRUM и дополнительных устройств к нему. Сложно сразу написать оптимальную подпрограмму, а у нас важно место и скорость выполнения. Также долго.
3. Использовать опыт других людей, их подпрограммы. Достоинства - экономия времени, высокая скорость, разнообразие игр, накопление опыта.

А про одинаковые имена файлов архивов с подпрограммами беспокоиться не стоит. Такая ситуация, возможно, будет иметь место только вначале, когда все захотят оставить свой след в истории и помочь начинающим профессионально написанными подпрограммами. Потом все стабилизируется. Да мне нетрудно исправить номер в имени файла. Лишь бы польза была другим от этого.

Alex Rider
19.07.2013, 09:26
Насколько я понмю, уже была попытка создать библиотеку демомейкера...
Библиотека демомейкера - утопия. Демо - демонстрация оригинальных разработок, а не умения собрать что-то из готового набора заезженных процедур и спрайтов.


Запись мнемоники там была весёлая, почти в строчку... ну чтобы непонятнее было
Потому что принималось все подряд. Никакой модерации, никакого интереса ни у кого.

drbars
19.07.2013, 10:28
zst, игра, как и демо и любой софт — штука уникальная. Общие процедуры или аглоритмы можно найти в zx-прессе (zxdn.narod.ru например).

Моя процедура вывода спрайта http://zx.pk.ru/showthread.php?t=20554
Сделана как проба, куда реально её использовать я не придумал.

introspec
19.07.2013, 11:07
Если у кого-то хорошо получается писать на ассемблере - почему бы не научить этому других с помощью примеров и готовых подпрограмм ? Кроме этого предполагается собирать другую полезную информацию по созданию игр. Возможно все это приведет к небольшому увеличению написанных игр.
Вам нужно определиться, вы хотите модульности и доступности для начинающих, или вы хотите хорошую игру? чтобы на ёлку влезть и жопу не ободрать - не выйдет. Если вы хотите модульность и доступность для начинающих, не мешало бы разобраться в ограничениях AGD, откуда они взялись, почему сделано так как сделано. Посмотрели бы на игры, которые, кстати, зачастую выглядят далеко не позорно. Посмотрели бы на SP1, которая вообще говоря, специализированная спрайтовая библиотека, на ассемблере, с органичениями куда меньшими нежели чем у AGD.

Хорошая игра делается не так. Хорошая игра идёт от дизайна, и всё бросается этому дизайну в жертву. Под дизайном я понимаю в равной степени, свежую техническую идею, и идею об игровом процессе. Если мы, например, хотим делать скролл, мы сразу урезаем себе возможности по числу спрайтов. Если мы хотим биперный звук, нам нужно заранее продумывать, как его играть, т.к. тупо прервать игру на бипанье позволяют себе только совсем дурные программисты. Нельзя писать игру, не имея ни технической идеи, ни игрового процесса. Не получится запрограммировать что-нибудь, чтобы было, а потом подреховать молотком, т.е., что-то получится, конечно, но это не будет хорошая игра.

Прочтите, например, тред по SeaDragon. Вот это реальный пример для подражания, где техническая идея оттачивалась до той степени, пока не оказалось возможным реализовать нужный игровой процесс.

Alex Rider
19.07.2013, 11:12
zst, игра, как и демо и любой софт — штука уникальная.
Скорее не соглашусь с этим утверждением. В демо уникальный код показывает уникальный видео- или аудиоэффект. Уникальность системного софта обусловленно уникальностью набора решаемых задач. А в играх много рутинного кода, который невидим пользователю и не задает специфику игры. Да, согласен, в некоторых играх нужен уникальный опрос клавиатуры, уникальные видеоэффекты, но очень много тривиальных процедур. Специфика игры - это оформление (графика и звуки) и логика, но не опрос клавиатуры, вывод спрайтов, текста, загрузка состояния, управление прерываниями и еще 100500 мелочей. Вот такую коллекцию часто используемой "рутины" и предлагает создать zst, если я правильно понял. Ну и да, чтобы было с чем поэкспериментировать для начала, в коллекции нужны спрайты, звуки, шрифты - то, что можно потом с легкостью заменить на оригиналь сдизайненное. В идеале, при максимальном использовании библиотеки, останется написать только логику, но никто не мешает использовать из библиотеки только неспецифичные для игры модули.

Кстати, формат исходников - SjAsm? Отлаживать будем в Unreal? Редактировать текст в чем? Я использую ConTEXT, например (с его минусами, ага). У меня есть "готовая" IDE с инструкцией по настройке. Жать чем будем? Я использую MegaLZ, может, от скудности ума.

zx-kit
20.07.2013, 09:42
А в играх много рутинного кода, который невидим пользователю и не задает специфику игры. Да, согласен, в некоторых играх нужен уникальный опрос клавиатуры, уникальные видеоэффекты, но очень много тривиальных процедур. Специфика игры - это оформление (графика и звуки) и логика, но не опрос клавиатуры, вывод спрайтов, текста, загрузка состояния, управление прерываниями и еще 100500 мелочей. Вот такую коллекцию часто используемой "рутины" и предлагает создать zst, если я правильно понял. Ну и да, чтобы было с чем поэкспериментировать для начала, в коллекции нужны спрайты, звуки, шрифты - то, что можно потом с легкостью заменить на оригиналь сдизайненное. В идеале, при максимальном использовании библиотеки, останется написать только логику, но никто не мешает использовать из библиотеки только неспецифичные для игры модули.

Да, я с вами полностью согласен. Нужно собрать базовый комплект для начала программирования игр на ассемблере. Файлы лучше добавлять в порядке от простого к сложному. Сначала пришедший программировать человек скачает редактор, компилятор, эмулятор. Потом - настройки к ним, базовые подпрограммы на ассемблере, пример простой программы, использующей эти процедуры. Начнет разбираться в них с помощью комментариев автора. Потом начнет сам комбинировать и использовать готовые подпрограммы. Как научится писать на ассемблере в данной среде - начнет реализовывать свои идеи в простейших играх. Потом... - дальше все зависит от этого человека, мы сделали максимально возможное для его ввода в курс дела.


Кстати, формат исходников - SjAsm? Отлаживать будем в Unreal? Редактировать текст в чем? Я использую ConTEXT, например (с его минусами, ага). У меня есть "готовая" IDE с инструкцией по настройке. Жать чем будем? Я использую MegaLZ, может, от скудности ума.
Да, эти программы подойдут большинству начинающих программистов - давайте их и будем использовать в примерах. Настройки для начинающих очень пригодились бы. Ссылки на первые три программы я добавил на сайт (http://www.z80a.ru/biblioteka-podprogramm), нужна для пакера MegaLZ.

---------- Post added at 10:42 ---------- Previous post was at 10:09 ----------


Общие процедуры или аглоритмы можно найти в zx-прессе (zxdn.narod.ru например).

Спасибо. Добавил ссылку на сайт.


Моя процедура вывода спрайта http://zx.pk.ru/showthread.php?t=20554
Сделана как проба, куда реально её использовать я не придумал.
Прошу оформить окончательную версию в виде файла для добавления в общую библиотеку с кратким описанием особенностей вашей процедуры.

Alex Rider
20.07.2013, 12:33
Цитата:
Сообщение от drbars
Общие процедуры или аглоритмы можно найти в zx-прессе (zxdn.narod.ru например).
Спасибо. Добавил ссылку на сайт.
Я бы добавил еще ссылку на zxpress (http://zxpress.ru/) и на Virtual TR-DOS (http://vtrdos.ru/). Постараюсь сегодня-завтра выложить свою IDE с инструкциями по настройке и запуску Hello world.
P.S. "русскоязычный" и "англоязычный" (http://www.z80a.ru/ssylki) пишутся без дефиса.

Andrew771
22.07.2013, 14:45
Появилась идея собрать библиотеку из простых подпрограмм на ассемблере SJASM
Уже начали делать тут (http://zx.pk.ru/showthread.php?t=19727&highlight=%E1%E8%E1%EB%E8%EE%F2%E5%EA%E0), правда, всё захлебнулось. :)

kas29
22.07.2013, 16:33
9 - в новой версии
девять чего?

---------- Post added at 19:30 ---------- Previous post was at 19:18 ----------


А что AGD позволяет написать любую игру?
На самом деле, написать(достойного) многое можно..

Вы будете в них играть ?
Без сомнения, играть будут многие..

Шансов написать что-нибудь стоещее мало.
Заблуждение.
Всё зависит на сколько фантазия позволяет.. и время..

На ассемблере теперь уже никто не пишет ?
Или ленятся..)

---------- Post added at 19:33 ---------- Previous post was at 19:30 ----------


Что нужно для написания игр ?
Желание и время..)

zx-kit
22.07.2013, 19:22
Нашел на WOS игру ТАНЧИКИ 2013 года -- http://www.worldofspectrum.org/infoseekid.cgi?id=0028161

goodboy
22.07.2013, 19:26
Нашел на WOS игру ТАНЧИКИ 2013 года
а её автор тут и презентовал на форуме
`Игрушка Tank Battle была написана в 1995 году.`

null_device
22.07.2013, 19:26
zst, и? Тема с этой игрой (http://zx-pk.ru/showthread.php?p=589316#post589316) была на форуме. ;)

zx-kit
22.07.2013, 20:21
zst, и? Тема с этой игрой (http://zx-pk.ru/showthread.php?p=589316#post589316) была на форуме. ;)
Я не видел.

Жду настроек IDE (связки редактор->ассемблер->эмулятор) от Alex_Rider-a. Буду тоже осваивать новые технологии программирования на PC. Редактор спрайтов SevenUP убрал из ссылок - возможно там вирус.


Уже начали делать тут (http://zx.pk.ru/showthread.php?t=19727&highlight=%E1%E8%E1%EB%E8%EE%F2%E5%EA%E0), правда, всё захлебнулось. :)
Что-то там предлагалась сложная организация хранения - вот и захлебнулось. Да и подпрограммы были сомнительной полезности типа рисования круга. Мы же игры писать собираемся. Да и стиль у Gohlinish-a сложный для начинающих. А вот ваш список (http://zx.pk.ru/showpost.php?p=356168&postcount=62) очень полезный был. Как раз это и нужно для преодоления барьера ассемблера и других сервисных программ. Psb про это тоже писал. Я так понял, что вы тоже поддерживаете мою идею и сами пишете программы?

По организации библиотеки: чем проще - тем лучше!
Один ассемблер! Один эмулятор! Никаких SVN! Никаких сервисов, форумов и т.п. излишеств!

В библитеке на каждую процедуру лучше размещать 3 файла в одном архиве:
1. Сама процедура для ассемблера SjASMPlus с краткими комментариями сложных мест в коде и шапкой автора типа:


;---------------------------------------------------------------------------------
;- Скроллинг фона на 1 точку влево с помощью видеокарты METEOR-2013 www.zxkit.ru -
;- экран размером 320 х 240 точек, 256 цветов на точку -
;- спрайты фона размером 16 х 16 точек, карта уровня размером 15 х 256 спрайтов -
;- время выполнения около 6851 тактов Z80 = 9.8 % от 69888 тактов в кадре TV -
;---------------------------------------------------------------------------------


2. Текстовой файл с более подробным описанием и особенностями применения процедуры.

3. Минимальный проект, готовый для компиляции и автоматического запуска в эмуляторе. В нем пример вызова и использования данной процедуры.

Andrew771
23.07.2013, 11:12
Я так понял, что вы тоже поддерживаете мою идею и сами пишете программы?
Да, поддерживаю. Но сомневаюсь теперь, что это реально создать. Нужна куча времени и остановка всех остальных своих проектов. Т.к. это целая работа.
Пишу сейчас только игры. На данный момент уже полгода бездельничаю. :)

zx-kit
23.07.2013, 18:59
Да, поддерживаю. Но сомневаюсь теперь, что это реально создать. Нужна куча времени и остановка всех остальных своих проектов. Т.к. это целая работа.
Пишу сейчас только игры. На данный момент уже полгода бездельничаю. :)
На мой вгляд, на это особо времени тратить не придется. Авторов будет человека два - Alex_Rider и, возможно, вы. У других пока желания нет. Мы же хотим просто набор файлов. Чтобы все было в одном месте. И готовое к запуску в эмуляторе.

Andrew771
24.07.2013, 09:33
Ладно, займусь, буду наполнять по возможности, быстро не обещаю.

---------- Post added at 09:33 ---------- Previous post was at 09:29 ----------

Вот исходники моих игр, написаны в виндовом Блокноте:

http://zx.pk.ru/showpost.php?p=434945&postcount=128
http://zx.pk.ru/showpost.php?p=478118&postcount=129
http://zx.pk.ru/showpost.php?p=554273&postcount=130

В них куча процедур, которые попадут в базу.

Alex Rider
24.07.2013, 23:54
Обещанная IDE. (http://sderni.ru/189974) А вот инструкция:

1. Распаковать архив на любой локальный диск (в нем дистрибутив текстового редактора, кросс-ассемблер, эмулятор, пример программы).
2. Установить ConText (папку ConText можно удалить после настройки)
3. Скопировать файл z80.chl в папку с установленным ConText, подпапку Highlighters.
4. Запустить ConText, настроить его опции (Настройки > Настройки среды) согласно приложенным скриншотам
5. Открыть в ConText файл Sample\Sample.a80
6. Нажать F9 для компиляции, F10 для запуска примера

zx-kit
26.07.2013, 18:10
Проект движка для игры "FUTURE TANK".

Уточнение:
7. Как только FT пытается выехать за пределы этого воображаемого квадрата начинается скроллинг экрана. Так как сдвигать за один кадр весь экран невозможно – сдвигать будем часть. Это будет квадрат размером 11 х 11 клеток вокруг FT.

goodboy
26.07.2013, 19:00
Проект движка для игры "FUTURE TANK".
а контроль танка/башни раздельный ?

zx-kit
26.07.2013, 19:04
а контроль танка/башни раздельный ?
Передвижение танка:
A - влево
D - вправо
S - вниз
W - вверх

Стрельба:
6 - влево
7 - вправо
8 - вниз
9 - вверх

0 - вперед

zx-kit
26.07.2013, 20:49
Обещанная IDE. (http://sderni.ru/189974) А вот инструкция:

1. Распаковать архив на любой локальный диск (в нем дистрибутив текстового редактора, кросс-ассемблер, эмулятор, пример программы).
2. Установить ConText (папку ConText можно удалить после настройки)
3. Скопировать файл z80.chl в папку с установленным ConText, подпапку Highlighters.
4. Запустить ConText, настроить его опции (Настройки > Настройки среды) согласно приложенным скриншотам
5. Открыть в ConText файл Sample\Sample.a80
6. Нажать F9 для компиляции, F10 для запуска примера

Спасибо огромное. Добавил на сайт www.z80a.ru (http://www.z80a.ru/biblioteka-podprogramm)
Все прекрасно заработало. Теперь любой желающий может приобщиться к написанию игр на ассемблере:

zx-kit
26.07.2013, 22:39
Наброски спрайтов движущихся объектов

http://s019.radikal.ru/i626/1307/e5/323ff959ee02t.jpg (http://s019.radikal.ru/i626/1307/e5/323ff959ee02.png)

Добавил кнопку 0 - стрельба вперед.

zx-kit
27.07.2013, 11:50
Танки трех типоразмеров в движении.

http://i054.radikal.ru/1307/a8/fa1f8800584dt.jpg (http://i054.radikal.ru/1307/a8/fa1f8800584d.png)

drbars
27.07.2013, 22:48
Обещанная IDE. (http://sderni.ru/189974) А вот инструкция:

1. Распаковать архив на любой локальный диск (в нем дистрибутив текстового редактора, кросс-ассемблер, эмулятор, пример программы).
2. Установить ConText (папку ConText можно удалить после настройки)
3. Скопировать файл z80.chl в папку с установленным ConText, подпапку Highlighters.
4. Запустить ConText, настроить его опции (Настройки > Настройки среды) согласно приложенным скриншотам
5. Открыть в ConText файл Sample\Sample.a80
6. Нажать F9 для компиляции, F10 для запуска примера
В анриале лучше всего в ini прописать driver=blt, а video=double :)

Alex Rider
27.07.2013, 23:53
В анриале лучше всего в ini прописать driver=blt, а video=double :)

У меня на виртуалке driver=blt не завелся. А video=double... Ну зажрался я, на моем мониторе double нифига не разобрать:)

drbars
28.07.2013, 11:34
У меня на виртуалке driver=blt не завелся. А video=double... Ну зажрался я, на моем мониторе double нифига не разобрать:)
режим blt плавный, как и 8ой спектакулятор. Не у всех же виртуалка :)

zx-kit
28.07.2013, 13:11
Спрайты для начала есть. Теперь нужно придумать. как их лучше хранить и выводить. Скорее всего при движении по-горизонтали и вертикали будут разные процедуры. При движении по-горизонтали возможна ситуация, когда танк выезжает из-за границы экрана. То есть нужно изображать не весь спрайт, а 1 или 2 столбика. Значит нужно в процедуре вывода спрайта предусмотреть печать тех столбиков, которые входят в диапазон координат X окна игрового поля. Размер игрового поля 24 х 24 клетки, т.е. 192 х 192 точки.

Спрайты симметричные относительно горизонатальной оси, значит можно хранить только половину спрайта для экономии памяти. По 8 байтов в столбике, 3 столбика. В столбике копируем 8 байтов из спрайта, затем повторяем их в обратном порядке. Потом переходим к печати следующего столбика. При печати каждого столбика проверять, входит ли он в область экрана. Если нет, то переходим к следующему столбику спрайта.

Так как танки движутся с максимальной скоростью 1 точка за кадр, нужно хранить 8 фаз движения на каждое направление. Это займет определенное место. На каждый типоразмер при движении влево потребуется 8 полуспрайтов по 3 столбика по 8 байтов, т.е. 192 байта. Для движения вправо еще 192 байта. Для движения вверх и вниз два спрайта по 3 столбика по 16 байтов. Таким образом на один типоразмер танков требуется 192+192+48+48=480 байтов.

Если будет три типоразмера танков и один FT, то для изображения их движений потребуется около 2Кбайт спрайтов. Это без учета цвета.

Однако при выводе спрайтов столбиками по 16 байтов потребует 2 раза переходить границу клетки на каждый столбик, а это около 37 тактов. Да еще проверять, входит ли этот столбик в границы экрана. Это неоправданно замедлит вывод спрайтов, которые полностью входят на экран. Наверно лучше проверять, входит ли спрайт полностью. Если да, выводить спрайт более быстрым способом - Сначала 3 байта 1 строки, потом 3 байта 2 строки и так 16 раз. Но все равно будут 2 перехода границ клеток, но это на весь спрайт, а не каждый столбик. Быстродействие тоже важно.

Для частично отображаемых спрайтов на границах экрана потребуется отдельная процедура с хитрым алгоритмом вывода или индексной адресацией в ОЗУ спрайта, так как при отображении спрайта стольбиками байты спрайта будут браться не подряд. Или хранить спрайты как предлагал Alone Coder. При этом байты в столбике одного спрайта располагаются с шагом 256 байтов. Для перехода к следующему байту в столбике достаточно будет увеличить старший байт адреса. Т.о. данный способ хранения спрайтов подходит для более быстрого вывода спрайта строчками, а на границах экрана его можно использовать и для вывода спрайта столбиками.

Хорошо. С хранением спрайтов разобрался. Теперь нужно написать процедуру достаточно быстрого вывода спрайта, используя процедуру оределения адреса на экране из книжки "Прикладная графика" от Инфоркома или аналогичную. Спрайты будут выводиться зигзагами. Сначала вправо, потом влево, по возможности использовать переход к следующему адресу байта на экране однобайтовыми команадами. Только при переходе через горизонтальные границы клеток потребуется более сложный способ определения следующего адреса на экране. Но он уже придуман. Занимает времени 37 тактов:

4 LD A,L ; увеличиваем номера ряда в сегменте.
7 ADD A, 0010 0000 ; если был ряд номер 7 - установится флаг C (нужен переход в следующий сектор экрана)
4 LD L,A
4 LD A,H
7 ADC A,0 ; переходим в следующий сектор, если необходимо
7 AND 1111 1000 ; обнуляем номер строки в клетке
4 LD H,A

zx-kit
28.07.2013, 15:27
Хранение спрайтов в памяти. Описание для библиотеки. Удобный способ подсказал alone (http://www.zx.pk.ru/showpost.php?p=611409&postcount=82).

Идея такая. 256 байтов в области спрайтов выделяются для хранения первых строк нескольких спрайтов. Следующие 256 байтов выделяются для хранения вторых строк нескольких спрайтов и т.д. на всю высоту спрайта.
При этом байты в столбике одного спрайта располагаются с шагом 256 байтов. Для перехода к следующему байту в столбике (по-вертикали) достаточно будет увеличить старший байт адреса в области спрайтов.
Для перехода к следующему байту спрайта по-горизонтали достаточно увеличить младший байт адреса о области спрайтов.

Таким образом, данный способ хранения спрайтов подходит для вывода спрайта как строками, так и столбцами.

Адрес начала нужного спрайта можно определить, прибавив к адресу начала области спрайтов номер спрайта (от 0 до максимально влезшего) столько раз, сколько байтов в строке каждого спрайта. Это подходит для случая, когда все спрайты одинакового размера. Также можно составить таблицу для определения по номеру спрайта его адреса.

jerri
28.07.2013, 22:16
zst, не самый удобный способ кстати
по скорости не самый быстрый и ограничение на высоту спрайта

zx-kit
28.07.2013, 23:05
zst, не самый удобный способ кстати
по скорости не самый быстрый и ограничение на высоту спрайта

А какие еще бывают удобные и быстрые способы хранения спрайтов ? Про ограничение в высоту - не вижу ограничений. Объясните, в чем ограничение?

У меня будут полуспрайты высотой 8 точек. 8 удобно тем, что спрайты можно нарисовать прямо на экране. И верхний сегмент картинки (2Кб) можно скопировать без преобразований в область спрайтов. Для других высот спрайтов картинку придется преобразовывать. Но это не ограничение при хранении спрайтов.

На мой взгляд, недостатков у такого способа хранения нет.

jerri
29.07.2013, 09:29
zst, хорошо считаем

1. сколько графики будет использовано в игре - допустим не более 16 кб
итого отдаем под графику последнюю страницу
64*256
итого максимальная высота спрайта 64 точки
при этом на ковре останется какое то количество свободного места которое никак не заполнить вот как вот здесь:
https://www.dropbox.com/s/wh8nfgjf60rictx/carpet.png"]https://www.dropbox.com/s/wh8nfgjf60rictx/carpet.png"]https://www.dropbox.com/s/wh8nfgjf60rictx/carpet.png (https://www.dropbox.com/s/wh8nfgjf60rictx/carpet.png)
и использовать его не очень удобно.

2 при выводе графики нельзя использовать стек и не очень удобно использовать спрайты с маской


de откуда
hl куда

простой вывод

ld a,(de)
ld (hl),a

вывод с наложением

ld a,(de)
or (hl)
ld (hl),a

вывод с автомаской

ld a,(de)
ld c,a
ld a,(bc)
and (hl)
or c
ld (hl),a

т.е как видим много лишних манипуляций



зато удобно делать урезание по краю экрана

вывод же спрайтов с маской змейкой через стек самый быстрый по скорости

pop de
ld a,(hl)
and e
or d
ld (hl),a

drbars
29.07.2013, 10:11
Ещё про зеркалирование не забываем :) А вообще я не понял, выводим спрайт по координатам кратным 8 ? Мне думается танчики ездить должны попиксельно.

jerri
29.07.2013, 11:19
drbars, декрунчим спрайты до точки либо до 2х и спокойно выводим до знакоместа :)

newart
29.07.2013, 11:42
Спасибо огромное. Добавил на сайт www.z80a.ru
Автор совсем не ведает о существовании zxpress.ru?

Там сорцов поболее чем на zxdn, не говоря уже про учебники.

drbars
29.07.2013, 14:34
Автор совсем не ведает о существовании zxpress.ru?
Там сорцов поболее чем на zxdn, не говоря уже про учебники.
Тема создания базы процедур для игры уже переросла в открытое обсуждение написания игры :) Сорцов навалом, главное поискать :) Всё уже придумано до нас! (с)

zx-kit
29.07.2013, 19:32
zst, хорошо считаем

1. сколько графики будет использовано в игре - допустим не более 16 кб
итого отдаем под графику последнюю страницу
64*256
итого максимальная высота спрайта 64 точки
при этом на ковре останется какое то количество свободного места которое никак не заполнить вот как вот здесь...и использовать его не очень удобно.

2 при выводе графики нельзя использовать стек и не очень удобно использовать спрайты с маской ...
...
зато удобно делать урезание по краю экрана

вывод же спрайтов с маской змейкой через стек самый быстрый по скорости

pop de
ld a,(hl)
and e
or d
ld (hl),a
Да, место не очень рационально используется. Я поэтому и хотел использовать данный способ хранения чтобы можно было легко выводить 1-2 столбика из трех в спрайте. Но лучше я переделаю вывод змейкой через стек. Это ускорит вывод всех спрайтов, которые влезают на экран полностью. Только от экономии памяти с помощью полуспрайтов придется отказаться. И потребуется перекодировать спрайты в нужный формат.

zx-kit
29.07.2013, 19:35
Ещё про зеркалирование не забываем :) А вообще я не понял, выводим спрайт по координатам кратным 8 ? Мне думается танчики ездить должны попиксельно.

Спрайты будут двигаться попиксельно. На каждое направление по 8 спрайтов для попиксельного движения.

Спрайты нарисовал в GALE (пока для движения влево и вправо), сохранил в BMP, преобразовал в SCR. А дальше как их добавить в проект игры - чтобы я их мог загрузить на экран как обычную картинку ? На рисунке условно паказаны клетки (границы знакомест).

zx-kit
29.07.2013, 19:39
Автор совсем не ведает о существовании zxpress.ru?

Там сорцов поболее чем на zxdn, не говоря уже про учебники.

Я добавил эту ссылку. Но там сорцы сырые, а я планирую собирать готовые для загрузки в SjASMPlus и с комментариями. Каждая подпрограмма должна быть с образцом запуска.

---------- Post added at 20:39 ---------- Previous post was at 20:38 ----------


Тема создания базы процедур для игры уже переросла в открытое обсуждение написания игры :) Сорцов навалом, главное поискать :) Всё уже придумано до нас! (с)

Вы мне придайте начальное ускорение, а дальше я сам буду рулить и крутить педали.

drbars
29.07.2013, 20:25
Спрайты будут двигаться попиксельно. На каждое направление по 8 спрайтов для попиксельного движения.

Спрайты нарисовал в GALE (пока для движения влево и вправо), сохранил в BMP, преобразовал в SCR. А дальше как их добавить в проект игры - чтобы я их мог загрузить на экран как обычную картинку ? На рисунке условно паказаны клетки (границы знакомест).
Думается мне, что нужно воспользоваться спрайтовой утилитой (http://zx.pk.ru/showthread.php?t=17811).

zx-kit
29.07.2013, 20:39
Думается мне, что нужно воспользоваться спрайтовой утилитой (http://zx.pk.ru/showthread.php?t=17811).
А как картинку загрузить в мою программу в эмуляторе ? Вернее, для начала в проект, описанный тут (http://www.zx.pk.ru/showpost.php?p=617201&postcount=147).

Alex Rider
29.07.2013, 21:38
Думается мне, что нужно воспользоваться спрайтовой утилитой.
Мой грабер "змейкой" сохранять не умеет.


А как картинку загрузить в мою программу в эмуляторе ? Вернее, для начала в проект, описанный тут.
Тебе надобно поставить какой-то командер (Far, Total Commander) и плагин к нему, который умеет писать/читать trd как архив. После этого ты сможешь копировать в файловую систему свою файлы с образа диска и на него. Я обычно получаю бинарь для включения в проект на ассемблере в своей файловой системе включаю данные директивой ассемблера INCBIN. Если данные загружаемые отдельно загрузчиком (GS-музыка, например), включаю ее по любому удобному адресу в памяти ZX и сохраняю на образ директивой SAVETRD. Если надо, сделаю проект SjASM, который, например, показывает scr-картинку. С инструкцией.

jerri
29.07.2013, 22:08
Спрайты будут двигаться попиксельно. На каждое направление по 8 спрайтов для попиксельного движения.

Спрайты нарисовал в GALE (пока для движения влево и вправо), сохранил в BMP, преобразовал в SCR. А дальше как их добавить в проект игры - чтобы я их мог загрузить на экран как обычную картинку ? На рисунке условно паказаны клетки (границы знакомест).

1.все спрайты сложить в виде одного высокого столбика
2.перевести в чернобелый TGA
3.загрузить спрайты с отрезанием заголовка
incbin "sprites.tga",36
для sjasm самое, то
либо воспользоваться моей утилитой picture2bin

zx-kit
29.07.2013, 22:11
Мой грабер "змейкой" сохранять не умеет.


Тебе надобно поставить какой-то командер (Far, Total Commander) и плагин к нему, который умеет писать/читать trd как архив. После этого ты сможешь копировать в файловую систему свою файлы с образа диска и на него. Я обычно получаю бинарь для включения в проект на ассемблере в своей файловой системе включаю данные директивой ассемблера INCBIN. Если данные загружаемые отдельно загрузчиком (GS-музыка, например), включаю ее по любому удобному адресу в памяти ZX и сохраняю на образ директивой SAVETRD. Если надо, сделаю проект SjASM, который, например, показывает scr-картинку. С инструкцией.
Хорошо бы. Пытался загрузить так:
INCBIN "130729-04SPRITES1.scr"
SAVETRD DiskName,"scr1.C",#4000,6912

Потом прервал пример, ввел RANDOMIZE USR 15616.
По команде LIST файл в каталоге есть. Но не показывает командой
LOAD "scr1" CODE.
А как добавить загрузку в бейсик я пока не понял.

---------- Post added at 23:11 ---------- Previous post was at 23:10 ----------


1.все спрайты сложить в виде одного высокого столбика
2.перевести в чернобелый TGA
3.загрузить спрайты с отрезанием заголовка
incbin "sprites.tga",36
для sjasm самое, то
либо воспользоваться моей утилитой picture2bin
Можно ссылку ?

zx-kit
30.07.2013, 06:20
Научился добавлять файл картинки в память. Теперь надо спрайты с картинки преобразовать в требуемый формат.

jerri
30.07.2013, 09:05
Можно ссылку ?
https://www.dropbox.com/s/49r325ve0yuay1i/cutter.exe

пробуй, будут вопросы/глюки пиши

Дмитрий
30.07.2013, 09:43
jerri, в каком формате кушает твоя прога файлы? в PNG (судя по краткой справке)?
Что значит /mixed в режиме /masked?
Один файл - один спрайт? или как-то указывается размер спрайта и файл разбивается на нужное число спрайтов?

drbars
30.07.2013, 11:01
Тут со спрайтами есть интересный момент: танчики будут двигаться с постоянной скоростью или могут ускоряться?

newart
30.07.2013, 12:23
Я добавил эту ссылку. Но там сорцы сырые, а я планирую собирать готовые для загрузки в SjASMPlus и с комментариями.
Ну ведь никто тебе не мешает их привести в соответсвующий вид? :)

jerri
30.07.2013, 13:16
jerri, в каком формате кушает твоя прога файлы? в PNG (судя по краткой справке)?
Что значит /mixed в режиме /masked?
Один файл - один спрайт? или как-то указывается размер спрайта и файл разбивается на нужное число спрайтов?

одна картинка один спрайт или несколько спрайтов одной ширины друг над другом

слева спрайт справа маска
миксед - байт маски + байт спрайта + байт маски + байт спрайта

Дмитрий
30.07.2013, 13:20
одна картинка один спрайт
Т.е. если дать на вход картинку размером 16*24, то получим один спрайт 16*24?


или несколько спрайтов одной ширины друг над другом
А размер как задать, чтоб правильно порезало?

jerri
30.07.2013, 13:59
размер должен быть задан кратно 8 для спрайта без маски и 16 для спрайта с маской

;стриппер\конвертер спрайтов из графических файлов ПЦ в пормат спрайтов
;ZX
;
;> cutter.exe picture.png [/font] [/masked] [/inverted] [/mixed]
;> [/zigzag] [/text]
;>
;> /font -сохрание картинки в виде фонта
;> /masked -картинка режется пополам - слева считается маска (сохраняет*ся первой) справа считается спрайт (соxраняется вторым)
;> /inverted -доп параметр для /masked иначе игнорирова*ть - взять байт
;> маски - инвертиров*ать - взять байт спрайта - сделать XOr c полученой маской
;> /mixed -доп параметр для /masked иначе игнорирова*ть -смешать спрайт и маску в вид байт маски+байт* спрайта
;> /zigzag - сохранять данные зигзагом - слева направо - справа налево
;>
;> /text - преобразов*ать полученные* данные в defb #xx,#xx
;> текст сохранять в виде .inc
;> иначе сохранять в виде .bin

---------- Post added at 13:59 ---------- Previous post was at 13:58 ----------

По глюкам опять же сообщайте, утилита написана без тестирования :)

Дмитрий
30.07.2013, 14:07
размер должен быть задан кратно 8 для спрайта без маски и 16 для спрайта с маской
Все равно не понял, как мне из файла, к примеру с размерами 32*32, получить 4 спрайта размерами 16*16? Опиши, плиз подробнее.

jerri
30.07.2013, 14:39
Дмитрий, никак :) ты берешь файл размером 16х16 и делаешь спрайт размером 2х16

или берешь файл размером 32*16 и получаешь спрайт размером 4*16
Картинко (https://www.dropbox.com/s/y1h916d27stsxve/masked.png)

а нарезать и фотошопом можно

---------- Post added at 14:39 ---------- Previous post was at 14:37 ----------

или вот так например

берем такую вот картинку (https://www.dropbox.com/s/cfnaszgpq26hp4m/masked_mixed.png)
получаем вот такой вот текстовичок (https://www.dropbox.com/s/uzpafrxe136jfa1/masked_mixed.inc)

Дмитрий
30.07.2013, 15:40
jerri, понял, думал, что можно распилить на несколько спрайтов одну картинку.

zx-kit
31.07.2013, 22:53
Первые движения танка. Вырезал спрайты прямо из картинки. Вывожу змейкой с помощью указателя стека. Дальше буду приводить функцию печати спрайта в более правильный вид с учетом атрибутов. Потом буду делать управление от клавиатуры.

drbars
01.08.2013, 00:29
Первые движения танка.
Для начала неплохо, я уже 3 раза движок своей игры переписал... оптимизация страшная сила :)

jerri
01.08.2013, 18:53
Первые движения танка. Вырезал спрайты прямо из картинки. Вывожу змейкой с помощью указателя стека. Дальше буду приводить функцию печати спрайта в более правильный вид с учетом атрибутов. Потом буду делать управление от клавиатуры.

У тебя все действие будет происходить на одном экране? если да то тебе урезание спрайтов не нужно

zx-kit
01.08.2013, 19:40
У тебя все действие будет происходить на одном экране? если да то тебе урезание спрайтов не нужно

Скорее всего будут некоторые уровни с большой картой. Для вывода части спрайта я прикинул, что один столбик спрайта можно будет вывести на экран с помощью индексной адресации. В IX или IY записать адрес начала спрайта. А командами LD A,(IX+N) загружать из спрайта нужные байты. Т.е. для неполных спрайтов будет отдельная подпрограмма, более медленная. Еще нужно написать отдельную подпрограмму для вывода спрайта при движении по-вертикали. Там в любом месте может встретиться граница клетки, а ее правильный переход при выводе спрайта занимает очень много времени...

А где бы почитать про способы описания объектов на карте ?
А как вам скорость движения танка? На мой взгляд очень быстро - надо уменьшить раза в 2-4, особенно для мощных танков.

Как правильно делить проект на несколько файлов, в которые можно было бы вынести громоздкие подпрограммы ?

Alex Rider
01.08.2013, 20:06
Как правильно делить проект на несколько файлов, в которые можно было бы вынести громоздкие подпрограммы ?

Если они компилироваться в один блок кода, то просто пишешь новый код в новом файле .a80, а в главном файле включаешь новый в нужное место директивой INCLUDE "Имя файла.a80". Чтобы в большом проекте не пересекались имена (да и для чтения удобнее), новый файл обрамляешь директивами MODULE имя модуля / ENDMODULE. Тогда во внешних файлах по отношению к этому символы из него используются в виде имя модуля.имя символа.

zx-kit
01.08.2013, 20:17
Если они компилироваться в один блок кода, то просто пишешь новый код в новом файле .a80, а в главном файле включаешь новый в нужное место директивой INCLUDE "Имя файла.a80". Чтобы в большом проекте не пересекались имена (да и для чтения удобнее), новый файл обрамляешь директивами MODULE имя модуля / ENDMODULE. Тогда во внешних файлах по отношению к этому символы из него используются в виде имя модуля.имя символа.
А почему расширение файлов a80, а не z80 ?

drbars
01.08.2013, 21:21
А почему расширение файлов a80, а не z80 ?
расширение a80 колорер фара правильно раскрашивает. формат z80 это образ снапшота для эмулятора.

Кстати я не совсем понял, зачем танчики выводить двумя процедурами. Я бы сделал одной процедурой по координатам (x,y). Так намного проще. Стек можно использовать для экранной таблицы. Зачем использовать стек где размер спрайта кратен 3 ? Скорость вывода спрайта нужно считать по самой медленной процедуре. Нет смысла сделать движение по X быстрее, чем по Y.

Вот например как сделать чтобы танк буксовал на месте? Или например танк едет по вязкой поверхности? Во всех этих случаях должна быть анимация гусениц. Поскольку у нас фазы спрайтов связаны с анимацией этого нельзя добиться. Лучше всего хранить спрайт не сдвинутым, и доводить до нужно фазы согласно координаты Х. Это даст универсальность и больше физики.

upd. почитал ТЗ.
-----------------
Такие игры, как например эта, пишутся по методу клеточного автомата (http://ru.wikipedia.org/wiki/Клеточный_автомат). Скролинг можно делать по знакоместу (8 точек на раз) тогда можно цвета сохранить. И кто сказал, что нужно двигать игровую зону целиком, а не только то, что нарисовано в этой зоне?

Пример игры клеточного автомата: Down to Earth (http://www.worldofspectrum.org/infoseekid.cgi?id=0001470)

jerri
02.08.2013, 14:34
Скорее всего будут некоторые уровни с большой картой. Для вывода части спрайта я прикинул, что один столбик спрайта можно будет вывести на экран с помощью индексной адресации. В IX или IY записать адрес начала спрайта. А командами LD A,(IX+N) загружать из спрайта нужные байты. Т.е. для неполных спрайтов будет отдельная подпрограмма, более медленная. Еще нужно написать отдельную подпрограмму для вывода спрайта при движении по-вертикали. Там в любом месте может встретиться граница клетки, а ее правильный переход при выводе спрайта занимает очень много времени...


наркоман чтоли? :)
это делается так

вот есть вывод спрайта
шириной 3



слева направо
pop de
ld a,(hl)
or e
xor d
ld (hl),a
inc l

pop de
ld a,(hl)
or e
xor d
ld (hl),a
inc l

pop de
ld a,(hl)
or e
xor d
ld (hl),a
inc h

справа налево
pop de
ld a,(hl)
or e
xor d
ld (hl),a
dec l

pop de
ld a,(hl)
or e
xor d
ld (hl),a
dec l

pop de
ld a,(hl)
or e
xor d
ld (hl),a
inc h



значит теперь нам надо добавить вывод спрайта с игнорированием 1 и 2 столбцов справа и 1 и 2 столбцов слева

-1 слева


слева направо
pop de

pop de
ld a,(hl)
or e
xor d
ld (hl),a
inc l

pop de
ld a,(hl)
or e
xor d
ld (hl),a
inc h


справа налево
dup2
pop de
ld a,(hl)
or e
xor d
ld (hl),a
dec l
edup
pop de


-2 слева


слева направо
pop de
pop de
pop de
ld a,(hl)
or e
xor d
ld (hl),a
inc h


справа налево
pop de
ld a,(hl)
or e
xor d
ld (hl),a

pop de
pop de
inc h


для варианта с урезанием спрайта справа напишешь сам :)



А где бы почитать про способы описания объектов на карте ?
А как вам скорость движения танка? На мой взгляд очень быстро - надо уменьшить раза в 2-4, особенно для мощных танков.


есть слово .w координата X и есть слово .w координата Y

потом ты по этим двум координатам привязанным к углу карты вычисляешь координаты на экране и выводишь
но у нас в слове вмещается 65536 значений а размер карты будет пусть 512 (2 полных экрана в ширину) тогда
вот наше слово
хххххххх хххххххх

из этого слова нас при выводе на экран интересуют только старшие 9 бит

где
з - смещение в знакоместах (0-63)
т - смещение в знакоместе (0-7) (фактически - величина скольжения спрайта)
д - дробная часть необходимая для задания скорости движения

зззззз тт т ддддддд

если ты делаешь add #0080 то спрайт движется со скоростью 1 точка в цикл
если add #0040 то 1 точка в 2 цикла
другие значения я думаю понятны :)



Как правильно делить проект на несколько файлов, в которые можно было бы вынести громоздкие подпрограммы ?

include "имя файла"
тогда при компиляции файл "имя файла" будет подгружен

jerri
02.08.2013, 16:43
Кстати я не совсем понял, зачем танчики выводить двумя процедурами. Я бы сделал одной процедурой по координатам (x,y). Так намного проще. Стек можно использовать для экранной таблицы. Зачем использовать стек где размер спрайта кратен 3 ? Скорость вывода спрайта нужно считать по самой медленной процедуре. Нет смысла сделать движение по X быстрее, чем по Y.


поскольку рисуем змейкой то всегда выбираем по 2 байта - я гарантирую это :)
предъяви процедуру рисования спрайта с использованием экранной таблицы

pop hl
add hl,bc
ld a,(de)
ld (hl),a

конечно красиво но где тогда высоту спрайта хранить?

drbars
02.08.2013, 19:51
поскольку рисуем змейкой то всегда выбираем по 2 байта - я гарантирую это :)
предъяви процедуру рисования спрайта с использованием экранной таблицы

pop hl
add hl,bc
ld a,(de)
ld (hl),a

конечно красиво но где тогда высоту спрайта хранить?

Хватит стебаться :D
где HX - высота, LX - смещение по X/8. Высота и смещение у меня тоже плавающие.


LD SP,@tabl
LD B,HX
L1 POP DE ;10
LD A,E ;4
OR LX ;8
LD E,A ;4
LDI ;16
LDI
LDI ;=74
DJNZ L1

Но у этого способа есть плюс если спрайт в произвольном месте экрана постоянно. Если же он всегда привязан к знакоместу и не движется по вертикали, думаю можно чуть быстрее :)

Второй способ в случае автора актуальнее:



LD IX,SP_OUT
LD BC,#18FF
LD HL,SPRITE
LD DE,SCREEN
JP (IX)

COR_DE LD A,E
SUB #E0
LD E,A
SBC A,A
AND #F8
ADD A,D
LD D,A
JP (IX)
LOOP_1 DEC DE
LD E,A
INC D
LD A,D
AND #07
JR Z,COR_DE
SP_OUT LD A,E
LDI
LDI
LDI
DJNZ LOOP_1

; 77 тактов на итерацию без корреции
; 124 такта на итерацию с коррецией, зато без таблиц.
; Быстро и сердито :)

drbars
02.08.2013, 21:56
Вот, набросал пример. Вывод способом 2.
O/P/Q/A - движение танка :)

Задание топикстартеру: прикрутить сюда спрайты для вертикального движения :)

jerri
03.08.2013, 14:32
ммм ну да если спрайт без маски тогда да :)
что будет если два танка столкнутся?

drbars
03.08.2013, 16:58
ммм ну да если спрайт без маски тогда да :)
что будет если два танка столкнутся?
Думаю, видеоэффекты :) Но суть примера не в этом, а в том чтобы показать как и в каком примерно направлении нужно писать данную игру.

Всё, что кажется простым на самом деле не так. Вывод по (OR) тоже можно реализовать. Я думаю нужно для начала определиться, что у нас будет на экране. Как будет выглядеть лабиринт, сколько одновременно может быть в нём танков в игровой области. Далее, как делать скролл? Тут с координатной плоскостью надо задуряться... Можно держать, глобальные координаты каждого танка на карте уровня... а видимое игровое окно будет проекцией области этой глобальной карты. И скролл будет делаться относительно координат игрока в игровом окне. Координаты проекции поменялись - все танки автоматом перерисовались. Как препятствия (стены) лабиринта описывать... два способа координатами прямоугольников или атрибутной картой.

Далее, ИИ игры должен как-то управлять этими объектами (танками врагов) через определённые методы. Тут и кратчайший поиск по лабиринту, и алгоритмы преследования.

zx-kit
04.08.2013, 15:52
Добавил управление танками по координатам, обрезку на краях окна и закрашивание атрибутами.
Дальше надо будет сделать тоже самое для движения по-вертикали.

http://s017.radikal.ru/i418/1308/77/5eac308d1d21t.jpg (http://s017.radikal.ru/i418/1308/77/5eac308d1d21.png)

drbars
04.08.2013, 16:53
:v2_dizzy_facepalm:

zx-kit
04.08.2013, 16:57
:v2_dizzy_facepalm:
А что ? Танки мчатся - что еще надо ? Теперь можно думать, как с помощью них сценарий реализовать.

drbars
04.08.2013, 17:02
А что ? Танки мчатся - что еще надо ? Теперь можно думать, как с помощью них сценарий реализовать.
Выше несколькими постами я добавил пример с исходником. Посмотри.

В нём уже управление есть. Только вывод надо переделать с LDI на ОR, иначе не получится расталкивать танки корпусом... будет затираться столбец одного из танков.

---
Посмотрел сорцы, отсечение по границе экрана вообще не так делается. Да и оно не нужно, т.к. я понял будет скролинг.

zx-kit
04.08.2013, 17:21
Выше несколькими постами я добавил пример с исходником. Посмотри.

В нём уже управление есть. Только вывод надо переделать с LDI на ОR, иначе не получится расталкивать танки корпусом... будет затираться столбец одного из танков.

Програмка короткая. Значит рисовать будет медленно. Атрибуты для полного спрайта у меня также рисуются. Управление посмотрю. Спасибо.


---
Посмотрел сорцы, отсечение по границе экрана вообще не так делается. Да и оно не нужно, т.к. я понял будет скролинг.
Скроллинг будет для фона и танков. При этом цвета будут серыми. Но возможна ситуация, когда танк сам заезжает в окно. Для этого и нужна обрезка. А целые спрайты выводятся максмиально быстро с использованием указателя стека. Я сделал обрезку с помощью индексной адресации, так как в данном случае через стек преимуществ почти нет. Зато одна универсальная процедура для разных (четырех) вариантов обрезки по-горизонтали.

jerri
04.08.2013, 17:41
:v2_dizzy_facepalm:
:v2_dizzy_facepalm::v2_dizzy_facepalm:

zx-kit
04.08.2013, 17:51
з - смещение в знакоместах (0-63)
т - смещение в знакоместе (0-7) (фактически - величина скольжения спрайта)
д - дробная часть необходимая для задания скорости движения

зззззз тт т ддддддд

если ты делаешь add #0080 то спрайт движется со скоростью 1 точка в цикл
если add #0040 то 1 точка в 2 цикла

Смещения в знакоместах и в знакоместе у меня пока в разных байтах. Вернее это проекции карты на окно. А вот глобальные коорднинаты наверно так надо сделать.

---------- Post added at 18:51 ---------- Previous post was at 18:44 ----------



Кстати я не совсем понял, зачем танчики выводить двумя процедурами. Я бы сделал одной процедурой по координатам (x,y). Так намного проще. Стек можно использовать для экранной таблицы. Зачем использовать стек где размер спрайта кратен 3 ? Скорость вывода спрайта нужно считать по самой медленной процедуре. Нет смысла сделать движение по X быстрее, чем по Y.

Как показал Jerri, максимальная скорость загрузки спрайта из области спрайтов с помощью команд pop de. А дальше я раскидал по трем столбцам по 16 байтов. Я это сделал для печати целых спрайтов. Получилось быстро, хотя громоздко.



Вот например как сделать чтобы танк буксовал на месте? Или например танк едет по вязкой поверхности? Во всех этих случаях должна быть анимация гусениц. Поскольку у нас фазы спрайтов связаны с анимацией этого нельзя добиться. Лучше всего хранить спрайт не сдвинутым, и доводить до нужно фазы согласно координаты Х. Это даст универсальность и больше физики.

Буксование - это пока излишество. Если понадобится - сделаем потом...



Такие игры, как например эта, пишутся по методу клеточного автомата (http://ru.wikipedia.org/wiki/Клеточный_автомат).
С движениями спрайтов проде пока все понятно. Теперь надо прорабатывать отслеживание игровой ситуации.

Клеточный автомат - это сложно. Надо что-нибудь попроще. Пока прикидываю реакцию врагов как в DOOM2 - все стоят на месте, пока не увидят. А дальше все идут в бой.

Каждый вражеский танк видит только спереди. При пересечении главным героем линии его обзора должен запускаться механизм на уничтожение врага, вернее главного героя. Возможна, наверно, также и радиосвязь между ними, чтобы звать на помощь или докладывать обстановку. Но тогда они могут съехаться со всего игрового поля, если один из танков обнаружил главного героя... Только скорости Z80 может не хватить, если постоянно сканировать линию обзора каждого танка.

Должен ли главный герой видеть врагов за стенами ? Если да, то ему как бы помогают с воздуха. Так тоже можно играть. Почти как в обычных танчиках. Должно же у главного героя быть какая-то компенсация их численного преимущества.

Спрайтов для лабиринта пока нет. Скорее всего это будут трубы и различные металлоконструкции. Ведь по сюжету игры (http://www.zx.pk.ru/showpost.php?p=350072&postcount=64) действие происходит на заводе-автомате, который был перепрограммирован на производство древней техники - автоматических танков.

drbars
04.08.2013, 18:44
Как показал Jerri, максимальная скорость загрузки спрайта из области спрайтов с помощью команд pop de. А дальше я раскидал по трем столбцам по 16 байтов. Я это сделал для печати целых спрайтов. Получилось быстро, хотя громоздко.
jerri показал один из способов вывода. Совсем не обязательно юзать стек для загрузки спрайта в регистры.

Возьмём 3 байта танка.

pop de ; 10t
ld (hl),e ; 7
inc l ; 4
ld (hl),d ; 7
inc l ; 4
pop de ; 10
ld (hl),e ; 7
inc h ; 4

Всего 53 такта на строку.

Теперь у меня:

ldi ; 16
ldi
ldi

Всего 48 тактов на строку. При этом можно рисовать в любую область экрана. И использовать для вертикального движения спрайта.

zx-kit
04.08.2013, 18:52
jerri показал один из способов вывода. Совсем не обязательно юзать стек для загрузки спрайта в регистры.

Возьмём 3 байта танка.

pop de ; 10t
ld (hl),e ; 7
inc l ; 4
ld (hl),d ; 7
inc l ; 4
pop de ; 10
ld (hl),e ; 7
inc h ; 4

Всего 53 такта на строку.

Теперь у меня:

ldi ; 16
ldi
ldi

Всего 48 тактов на строку. При этом можно рисовать в любую область экрана. И использовать для вертикального движения спрайта.
Что-то не очень понятно. В первой процедуре на копирование одного байта тратится 5+7+4=16 тактов. У вас тоже 16 тактов на 1 байт. Хотя можно без стека обойтись. Это тоже может быть удобно.

Небольшое уточнение. Если копировать "змейкой", то по второму способу будет так:
ldi
ldi
ldi
dec e
inc d
ldd
ldd
ldd
inc e
inc d
...
На три байта тратится 16+16+16+4+4. Все-таки первый способ быстрее.

Если посмотреть это фрагмент:

; Вывод спрайта
; HL = Адрес спрайта
; DE = Адрес экрана
SP_OUT:
LD IX,SPR_OUT
LD BC,#18FF
JP (IX)
COR_DE LD A,E
SUB #E0
LD E,A
SBC A,A
AND #F8
ADD A,D
LD D,A
JP (IX)
LOOP_1 DEC DE
LD E,A
INC D
LD A,D
AND #07
JR Z,COR_DE
SPR_OUT LD A,E
LDI
LDI
LDI
DJNZ LOOP_1
RET
Выглядит мудрено. И непонятно, зачем команда DEC DE. Ведь у вас до этого были LD A,E, а потом LD E,A и INC D. Если только LDI перескакивает...
На мой взгляд ваша процедура подходит для движения по-вертикали. А для движения по-горизонтали использовать стек.

drbars
04.08.2013, 20:36
Небольшое уточнение. Если копировать "змейкой", то по второму способу будет так:
ldi
ldi
ldi
dec e
inc d
ldd
ldd
ldd
inc e
inc d

Эта конструкция не будет работать. LDD уменьшает HL на 1. Будешь рисовать первую строку спрайта 2 раза.

И вообще, дело тут совсем не в тактах, а в рациональном использовании возможнстей ассемблера.

--
По организации игры:
1) Нужна процедура которая рисует танк с заданными параметрами (X,Y,направление, цвет).
2) Определяемся сколько маскимально танков может быть на игровой локации и формируем статический список из параметров танков и флагом активности. Эта процедура должна будет отрисовывать весь список каждые N фреймов. Далее у нас логические процедуры будут работать уже с этим списком.
3) Карта. Задаём коодинату каждого танка типа word. Получается большой максимальный размер карты 8192 знакомест по X и по Y.
4) Задаём координаты окна проекции (X:word,Y:word). Процедура читает массив карты коодинат танков, пересчитывает координаты для окна (в экранные), а также устанавливает флаг активности для тех танков которые попали в область проекции. Процедура №2 этот список отрисовывает.
5) Игрок изменяет глобальные координаты танка, при этом отслеживаются границы проекции... как только танк у границы, изменяются координаты окна проекции. Процедура №4 все пересчитывает, экран сдвигается. Все танки перерисовываются.

Как-то так. Но это без логики ещё.

jerri
04.08.2013, 20:38
концепт неверный
если использовать ковер то копировать можно так


ldi:ldi:ld a,(hl):ld (de),a
inc h
inc d: вот тут надо проверку воткнуть на переход на следующее знакоместо

ldd:ldd:ld a,(hl):ld (de),a
inc h
inc d

а тут да есть ошибка


; Вывод спрайта
; HL = Адрес спрайта
; DE = Адрес экрана
SP_OUT:
LD IX,SPR_OUT
LD BC,#18FF
JP (IX)
COR_DE
LD A,E
SUB #E0
LD E,A
SBC A,A
AND #F8
ADD A,D
LD D,A
JP (IX)
LOOP_1
LD E,A
INC D
LD A,D
AND #07
JR Z,COR_DE
SPR_OUT LD A,E
LDI
LDI
LDI
DJNZ LOOP_1
RET

drbars
04.08.2013, 21:13
а тут да есть ошибка

Нет там ошибки.. Чтобы я пожертвовал 7 тактов на пустоту! никогда! :D

Например спрайт находится по адресу:
#47FD, размер 3 байта.

Следующая строка спрайта:
#481D

LD A,E ; D=#47 ; E=#FD
1) LDI, de=#47fe
2) LDI, de=#47ff
3) LDI, de=#4800 (!)
LD E,A ; D =#48 ; E=#FD
получаем #48fd !

для расчёта следующей строки D должен быть #47, без DEC DE он будет уже #48

а далее расчёт следующей строки слетит с катушек сделая INC D.

Можно конечно классично сделать PUSH DE, POP DE обрамить LDI'шки. Но это уже 11+10=21 такт.
Моя версия восстанавлиает DE после LDI за 15 таков не используя стек :)
Процедура универсальная, из моего проекта.. там это актуально, когда спрайт попадает в эту область.
В этом проекте можно опустить такую коррекцию.

zx-kit
05.08.2013, 04:54
Эта конструкция не будет работать. LDD уменьшает HL на 1. Будешь рисовать первую строку спрайта 2 раза.

Да вы правы. LDD не будет работать. А команда DEC DE нужна у вас в некоторых ситуациях у правой границы экрана. У меня там спрайтов пока нет.

Нет там ошибки.. Чтобы я пожертвовал 7 тактов на пустоту! никогда!
Но вашу подпрограмму можно немного изменить, как посоветовал jerri. Тогда DEC DE будет не нужна:


...
LOOP_1 ; -7 ;DEC DE
LD E,A
INC D
LD A,D
AND #07
JR Z,COR_DE
SPR_OUT LD A,E
LDI
LDI
LD A,(HL) ;-16+7 ;LDI
LD (DE),A ;7
INC HL ;7
DJNZ LOOP_1
RET

итого в тактах время исполнения увеличится на -7-16+7+7+7=-2, т.е. будет работать быстрее на 2 такта.

drbars
05.08.2013, 06:07
Но вашу подпрограмму можно немного изменить, как посоветовал jerri. Тогда DEC DE будет не нужна:


...
LOOP_1 ; -7 ;DEC DE
LD E,A
INC D
LD A,D
AND #07
JR Z,COR_DE
SPR_OUT LD A,E
LDI
LDI
LD A,(HL) ;-16+7 ;LDI
LD (DE),A ;7
INC HL ;7
DJNZ LOOP_1
RET

итого в тактах время исполнения увеличится на -7-16+7+7+7=-2, т.е. будет работать быстрее на 2 такта.

Нет, работать не будет. Регистр A нельзя использовать.

drbars
05.08.2013, 11:13
Добавил движение вверх/вниз. Вывод танка по OR.

jerri
05.08.2013, 13:27
drbars, Вот так правильнее
Надо клешинг именьшать :)

drbars
05.08.2013, 14:42
drbars, Вот так правильнее
Надо клешинг именьшать :)
Круто! Приделал звук :v2_walkm:

jerri
05.08.2013, 15:59
Щас буриме сотворим :)

Alex Rider
05.08.2013, 19:18
А насколько важен для игры вывод спрайтов с максимально возможной скоростью? Неужто вывод 6 танчиков съест фрейм? Может, стоит уже дальше двигаться?
Собсна, тред про полезные процедуры, я внесу свои 5 копеек. Процедура опроса кнопок. По таблицам кнопок опрашивает клавиатуру и выдает байт напралений в kempston-формате



right: equ #01
left: equ #02
down: equ #04
up: equ #08
fire: equ #10

pool_keyborad_as_joystick: ; in: nothing
; out:
; d - pressed directions in kempston format
ld a,#fe ; check for CAPS SHIFT
in a,(#fe)
rra
ld hl,KeyMapping.key_table - 1 ; selection of appropriate keyboard table
jr c,.no_cs
ld hl,KeyMapping.cs_key_table - 1 ; hl - keyboard table (zero-limited)
.no_cs:
ld d,#00 ; clear key flag
ld c,#0fe ; low address of keyboard port
.loop:
inc hl ; next key
ld b,(hl) ; high byte of port address from table
inc b ; end of table check
dec b
ret z
inc hl ; going to key mask
in a,(c) ; reading half-row state
or (hl) ;
inc hl ; going to key flag
inc a ; a = half-row state or mask. if #ff - current key isn't pressed
ld a,d
jr z,.loop ; key isn't pressed
or (hl) ; result or key flag
ld d,a ; store it
jr .loop



Я использую такие таблицы кодов (поддержка sinclair 1,2, qaopm+space, cursor keys)


; key table format
; 1st byte - high byte of keyboard half-row address
; 2nd byte - inverted key mask (e.g. outer key - #fe, next key - #0fd etc)
; 3rd byte - direction bit

key_table:
db #0ef, #0fe, fire ;0
db #0ef, #0fd, up ;9
db #0ef, #0fb, down ;8
db #0ef, #0f7, right ;7
db #0ef, #0ef, left ;6

db #0f7, #0fe, left ;1
db #0f7, #0fd, right ;2
db #0f7, #0fb, down ;3
db #0f7, #0f7, up ;4
db #0f7, #0ef, fire ;5

db #0df, #0fe, right ;p
db #0df, #0fd, left ;o
db #0fb, #0fe, up ;q
db #0fd, #0fe, down ;a
db #07f, #0fb, fire ;m
db #07f, #0fe, fire ;space

db #000


cs_key_table:
db #0ef, #0fe, fire ;0
db #0ef, #0fb, right ;8
db #0ef, #0f7, up ;7
db #0ef, #0ef, down ;6
db #0f7, #0ef, left ;5

db #000

drbars
05.08.2013, 20:51
Добавил обработчик клавиатуры с переопределением клавиш :v2_dizzy_keyboard:

jerri
05.08.2013, 22:42
графику надо поправить
правильный размер танка - 3*3 3*4

drbars
05.08.2013, 22:59
графику надо поправить
правильный размер танка - 3*3 3*4
Да там надо всё иначе делать вообще. Процедурка вывода танка должна уметь за край экрана рисовать, т.к. во время игрового процесса оттуда может выехать танк врага. А за (X,Y) координаты спрайта нужно взять правый нижний угол этого спрайта.

Если делать как я предложил, глобальными координатами и окном игровой проекции. Кстати динамично должно получится... Препятствия в лабиринте сделать можно тайлами 16х16px. Анализируем игровую проекцию и если было смещение быстро стеком рисуем сначала тайлы, потом танки... скролл проще по 16px сделать.

Тайлы которые рисуются в ирговой проекции стоят атрибутную карту, по ней проверяем препятствия.

В идеале, сырой движок должен выглядеть так: тестовая локация обрамлённая тайлами по периметру. Внутри хаотично катают танки... и мы перемещаемся среди них, игровое окно двигается (можно разными способами сделать).

Думаю есть шанс за фрейм уложиться даже со скроллом.

jerri
06.08.2013, 00:35
drbars, элементы 24х24 иначе танк некрасивый будет

zx-kit
06.08.2013, 06:03
О, вы уже скоро без меня игру сделаете ! Я пока иду мелкими. но верными шагами.
Переписал функцию печати спрайтов. Теперь с помощью команд LDI. Это позволит использовать процедуру для печати целых спрайтов по-горизонтали , а также для печати целых и обрезанных спрайтов по-вертикали. Получилось почти как у drbars.

Попробовал движение вправо. Наверно надо передвинуть спрайты на одну клетку вправо, чтобы не оставался след около правого края экрана.

Andrew771
06.08.2013, 11:11
А нафига в такой игре заморачиваться быстрым выводом спрайта? У тебя что, стратегия в реальном времени? Есть же более простая процедура, причем учитывающая и цвет, и маски, и выход за пределы экрана в книге "Как написать игру на Ассемблере". Ее чуть соптимизировать, раскрыть циклы, и всё.

jerri
06.08.2013, 11:52
Andrew771, ты видел игру firelord (http://www.worldofspectrum.org/infoseekid.cgi?id=0001775)Изнутри?
очень динамично и красиво смотрится
а теперь посмотри тот же mutantzone (http://www.worldofspectrum.org/infoseekid.cgi?id=0003335)от опера софт

какую игру приятнее играть?

Andrew771
06.08.2013, 13:58
в Танчиках простая процедура вывода подойдет

jerri
06.08.2013, 14:18
в Танчиках простая процедура вывода подойдет

насколько простая?
взять байт положить байт?

а если пуля будет рисоваться? а если взрыв? должен ли он накладываться поверх спрайтов танков?

будут ли обьекты заслоняющие поле? будет ли танк рисоваться под такими обьектами?

будут ли реализованы маскировочные сети? как они будут наложены на танки и взрывы?

какой размер будет иметь карта?

Andrew771
06.08.2013, 16:27
Для этого есть в той процедуре маски, а также принципы их наложения по AND, OR, XOR.

jerri
06.08.2013, 16:30
Andrew771, я умею маскировать спрайты :)
а сейчас я спросил что значит простая процедура вывода?

Andrew771
06.08.2013, 16:43
Andrew771, я умею маскировать спрайты
а сейчас я спросил что значит простая процедура вывода?
zst захотел наворотить кучу процедур для разных положений танков, а вы ему подсказываете всякие навороты. А зачем, если можно обойтись одной универсальной процедурой, которая в книге.

jerri
06.08.2013, 16:53
Andrew771, универсальная процедура тем и отличается что подходит для общих случаев т.е когда надо просто бросить кусок картинки и скорость при этом не важна.
но вот если надо это сделать быстро и качественно приходится уже думать.
посмотри старые игры тот же диззи, те же игры от opera soft. эти товарищи вообще никогда не меняли процедуры спрайтовые написанные хзкогда.
и сравни их с firefly, или тем же untouchables.

давай посчитаем
автор хочет 6 танков,
танки будут стрелять значит еще 6 выстрелов
еще герой и его выстрел или даже 3
итого уже 6+6+1+3 16 объектов на экране.
а теперь давай их еще в 50 фпс рисовать.
быстрее надо :)

Andrew771
06.08.2013, 16:58
ну делай, как хошь. Я бы не стал заморачиваться, если хватает скорости. 16 спрайтов - не так-то и много.

jerri
06.08.2013, 17:07
Andrew771, давай посмотрим

удаление спрайтов
рисование спрайтов
логика обьектов
звуки
а так да :) немного

Дмитрий
06.08.2013, 17:23
Тут маски еще не хватает, я так понимаю поле будет же не пустым, а танк будет елозить по траве/грунту/трясине, а оно тоже фон имеет...

Andrew771, человек же делает спрайты героя и врагов не 8*8, а 16*16 минимум, если добавится маска, то постоянная ротация данных спрайта/маски перед выводом и так 16 объектов подряд, а так же восстановление фона под спрайтом - уже во фрейм не вместится, да и мерцать будет убого. Надо изначально движок делать дельный, а не потом искать пути оптимизации скорости, когда уже будет сложно все переделывать. Я вон тоже сначала думал для экономии памяти в 128м спеке юзать универсальную п/п вывода спрайта, с постоянной ротацией, хоть она и развернута, но все же жрет не мало тактов. Поэтому оценив память и быстродействие, все же остановился на методе хранения сдвинутых спрайтов в памяти и быстрого вывода их на экран.

drbars
06.08.2013, 21:42
А мне даже интересно увидеть что получится :) Возможно, всё в итоге будет совсем иначе, чем в начале... у меня похожая ситуация поначалу была. Сначала сделал, заработало. Потом занимался оптимизацией, идеи приходят бывает не сразу. Зато добился приличных скоростей и гармоничного соотношения скорость/память. Потом через полгода посмотрел на код... WTF?:eek:

goodboy
06.08.2013, 23:27
возможно что-то пригодится из исходников Мастера ftp://ftp.worldofspectrum.org/pub/sinclair/games-extras/SaucerV1.17_SourceCode.zip

jerri
07.08.2013, 12:57
goodboy, если только звуки :)

zx-kit
08.08.2013, 16:16
насколько простая?
взять байт положить байт?

а если пуля будет рисоваться? а если взрыв? должен ли он накладываться поверх спрайтов танков?

будут ли обьекты заслоняющие поле? будет ли танк рисоваться под такими обьектами?

будут ли реализованы маскировочные сети? как они будут наложены на танки и взрывы?

какой размер будет иметь карта?
Скорее всего, из-за ограничений встроенной видеокатры ZX SPECTRUM, придется отказаться от объектов над и под танком (сетки, вода и т.п). Чтобы не было клешинга атрибутов танки будут ездить по черному фону каждый в своем периметре (в квадрате 3х3 клетки). Спрайты придется сделать такого же размера. Размеры танков до 16х16 точек. Одна пустая клетка в спрайте при приближении танка вплотную к периметру будет затирать след от танка сзади. Периметр сдвигается сразу на одну клетку. Внутри периметра перемещение на 1 точку. Между собой танки или лабиринт игрового поля не должны пересекаться, то есть каждый танк внутри своего периметра 3х3 клетки. Они даже могут подъехать вплотную друг к другу, насколько позволяют периметры. Тогда все будет нормально с цветами без клэшинга атрибутов. Фон планируется из спрайтов размером с клетку (8х8). На карте уровня каждому спрайту будет соответствовать одно или двухбайтный номер.

Пока отлажен выезд танков влево и вправо за границы окна. Также структурированы процедуры печати спрайта и расчета слудующего положения. Для оценки времени на изображение четырех танков закрасил BORDER синим цветом.

На первом уровне FUTURE TANK планируется как обычный вражеский танк мелкгого размера, но желтого цвета. Он был сделан из обычного танка путем захвата и перепрограммирования. Далее, по мере изучения вражеских технологий и собственных разработок, возможен апгрейд трофейного танка...

zx-kit
08.08.2013, 16:49
А нафига в такой игре заморачиваться быстрым выводом спрайта? У тебя что, стратегия в реальном времени? Есть же более простая процедура, причем учитывающая и цвет, и маски, и выход за пределы экрана в книге "Как написать игру на Ассемблере". Ее чуть соптимизировать, раскрыть циклы, и всё.
Как оказалось, любая процура на Z80 занимает очень много времени. Поэтому необходим запас за счет быстрых процедур вывода спрайтов.

introspec
08.08.2013, 17:07
Как оказалось, любая процедура на Z80 занимает очень много времени

(!!!)

Дмитрий
08.08.2013, 17:09
Скорее всего, из-за ограничений встроенной видеокатры ZX SPECTRUM, придется отказаться от объектов над и под танком (сетки, вода и т.п).
С развернутыми спрайтами можно и фон сделать - скорость упадет незначительно, а красота и играбельность в разы увеличится!
В процедуре вывода изменится только:
Было:

ld a,(de)
or (hl)
inc hl
ld (de),a
inc e

Стало:

ld a,(de)
and (hl)
inc hl
or (hl)
inc hl
ld (de),a
inc e

Что правда фон под спрайтом придется сохранять в буфер, а потом восстанавливать, вместо затирания спрайта на экране, как сейчас.
Штук 8-10 объектов можно свободно вместить во фрейм.

zx-kit
08.08.2013, 17:12
С развернутыми спрайтами можно и фон сделать - скорость упадет незначительно, а красота и играбельность в разы увеличится!

Игра станет черно-белой и медленной. К сожалению, тут ничего поделать нельзя. Или цвет или мелкий фон под гусеницами.

Дмитрий
08.08.2013, 17:40
К сожалению
Не видел цвета в UFO1-2, Черный Ворон, но не скажу, что это огромный минус этих игр...

---------- Post added at 16:33 ---------- Previous post was at 16:31 ----------


Игра станет черно-белой
Не обязательно - воду можно рисовать голубым, траву зеленым, асфальт - белым с соответствующим фоном... танки, да, станут безцветными...

---------- Post added at 16:40 ---------- Previous post was at 16:33 ----------


медленной
сколько объектов планируется одновременно выводить на экран? 8-10 мало? Пусть пули будут по XOR выводиться и восстанавливаться аналогично - это шибко на красоту и скорость не повлияет.
Чтоб еще сэкономить такты (если места еще не жалко) - можно не копировать каждый раз фон в буфер перед рисованием спрайта, а просто организовать буфер во все игровое поле и на начальном этапе туда все игровое поле загнать, а при стирании спрайта просто копировать инфу оттуда.

Crash Nicker
08.08.2013, 18:07
Не видел цвета в UFO1-2, Черный Ворон, но не скажу, что это огромный минус этих игр...

С хорошо прорисованными спрайтами - это вряд ли минус.

zx-kit
10.08.2013, 13:38
Не видел цвета в UFO1-2, Черный Ворон, но не скажу, что это огромный минус этих игр...

Я планирую более простую игру.

сколько объектов планируется одновременно выводить на экран? 8-10 мало?
Прикинул время отображения спрайтов от INT до начала экрана. Судя по синему цвету на BORDERe, без мерцания можно отобразить до 9 танков. Это без сохранения и масок с фона.

При обрезке время отображения увеличивается. Еще нужно снаряды изображать. Так что при существующем движке можно отобразить на экране не более 7 движущихся танков.

jerri
10.08.2013, 14:07
zst, предлагаю другой вариант

1 сортируем танки по координате Y
2 стираем танки по старой таблице
3 рисуем по новой
даже если у тебя процедура выйдет за пределы бордюра - не факт что это затронет танк

zx-kit
10.08.2013, 14:32
zst, предлагаю другой вариант

1 сортируем танки по координате Y
2 стираем танки по старой таблице
3 рисуем по новой
даже если у тебя процедура выйдет за пределы бордюра - не факт что это затронет танк
Спасибо, это может сработать. А то я уж подумал, что на ZX без мерцаний не обойтись. Я хочу сделать проще, без масок и стираний. Спрайты так сделаны, что следов при движении не остается.

...А насколько проще было бы писать программы, если бы INT начинался после экрана. Ну и правильная адресация экранной области (без перескоков на границах рядов и сегментов) позволила бы копировать столбики спрайтов командой LDIR...

jerri
10.08.2013, 15:50
zst, это тебе Вектор 6Ц нужен :)

кстати говоря

в С загрузить 255
в В загрузить смещение по Х


pop de
ld a,b
add a,e
ld e,a
ldi
ldi
ldi

в данном концепте уже будет удобнее

ну и ессно раскатать ее на 16 строк и выходить на нужную при выводе
и добавить еще 2 для урезания.

DJs3000
10.08.2013, 20:04
Слежу внимательно за данной веткой и хотя многого не понимаю всё равно очень интересно за процессом наблюдать да и результат конечный посмотреть. :)

zx-kit
13.08.2013, 00:03
Слежу внимательно за данной веткой и хотя многого не понимаю всё равно очень интересно за процессом наблюдать да и результат конечный посмотреть. :)

Да я только с помощью форума разрабатываю игру. Можно сказать online. Шедевры то делают молча, не показывая промежуточные результаты.

Начал проектировать 1 уровень. Показаны вражеские танки зеленого цвета, но сначала уровня их не видно, пока не повернуть за угол. Такая будет игровая обстановка. Цель 1 уровня - найти заправку (условно показана желтым цветом) и зарядиться.

DJs3000
13.08.2013, 00:06
Да я только с помощью форума разрабатываю игру. Можно сказать online. Шедевры то делают молча, не показывая промежуточные результаты.
Ну это ты зря так думаешь) Мне некоторые участники конкурса показывают промежуточные результаты)


Начал проектировать 1 уровень. Показаны вражеские танки зеленого цвета, но сначала уровня их не видно, пока не повернуть за угол. Такая будет игровая обстановка.
Гуд! Мне нравится очень)

jerri
13.08.2013, 00:42
zst, зачем такой обьем экрана отдаешь под мусор?
сделай полноэкранную