Просмотр полной версии : Что нужно для написания игр ?
Какие минимальные доработки 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.
Предполагаю, что лучше проигрывать запись. Так больше разнообразия звуков. Например, композитор на синтезаторе написал мелодию, кодер преобразовал ее в цифровой формат.
Значит 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, если не ошибаюсь.
А к чему все эти вопросы можно узнать?
В этом нажми Интро, после слов, будет музон. Это наверно лучшая реализация цифрового звука без GS.
http://zxaaa.untergrund.net/GAME/479.zip
Для вывода цифрового звука в 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-кодер.
Пока не на чем. Есть Спек48 и ZX-NEXT. Но уже нет дисководов и не подключен телевизор.
Надо делать PAL-кодер.
Ооо, это тяжёлый случай. Я ещё ты тут вроде игры хотел делать... Ну для начала скачай эмулятор что-ли какой. Типа Unreal или Spectaculator.
Ооо, это тяжёлый случай. Я ещё ты тут вроде игры хотел делать... Ну для начала скачай эмулятор что-ли какой. Типа Unreal или Spectaculator.
Я скорее о железе подумываю вот и спрашиваю у тех кто разбирается в играх.
Я скорее о железе подумываю вот и спрашиваю у тех кто разбирается в играх.
Сначало надо увидеть и послушать, что тебе предлагают, а уже потом думать о железе. :)
Evgeny Muchkin
21.06.2009, 17:42
Жалко, что NeoGS есть не у всех.
Было бы действительно жалко, еслы бы ни у кого не было бы возможности её приобрести! Купить её может совершенно свободно любой желающий.
Имхо, по звуку смело можно ориентироваться на GS с 2 мегами памяти на борту. Влезет все!
По графике - только обычный ZX экран.
Надо делать PAL-кодер.
Тоже не надо ничего придумывать; все уже сделано и сделано очень качественно. При всем при этом, цена готового изделия минимальная и подъемная.
Например, композитор на синтезаторе написал мелодию, кодер преобразовал ее в цифровой формат.
Минут 10 втыкал в эту фразу. Так ничего и не понял.
Может какой-нибудь сжатый формат использовать или mp3.
Дадада, и в качестве декодера-проигрывателя подключаем к спектруму PC, с аудиокарты которого будем гнать аналоговый звук прямиком на бипер спектрума. это идея!
А если cделать по принципу: послал блок со сжатым в каком-нибудь формате блоком в устройство, а оно само разжимает и постепенно выводит через AY или ЦАП?
Вот тут РС и пригодится. А чтоб снизить затраты, берем дешевый 386, для "разжатия" mp3 по блокам. Два канала не обязательно юзать,сойдет и моно. Битрейт - 96 kbps.
По способу вывода на экран какие-нибудь соображения есть?
А как же. Изображением займется NES. Осталось только все эти блоки собрать воедино.
И написать таки мморпг. А то Warcraft2 как-то некошерно в наш век.
Нет, 386 ужасно шумит, эта рухлядь еще и пожароопасная, лучше будет собрать аппаратный декодер звука/видео на базе ARM, и чем черт не шутит, запихнуть в него же сам спек и езернет.
Нет, 386 ужасно шумит, эта рухлядь еще и пожароопасная, лучше будет собрать аппаратный декодер звука/видео на базе ARM, и чем черт не шутит, запихнуть в него же сам спек и езернет.
да, так будет лучше. у меня где-то даже были исходники-библиотеки для работы с mp3, в pic контроллеры прошивали)
Было бы действительно жалко, еслы бы ни у кого не было бы возможности её приобрести! Купить её может совершенно свободно любой желающий.
Покупать надо, если есть игры под нее. Пока неверно она есть не у всех, а AY- у многих.
Имхо, по звуку смело можно ориентироваться на GS с 2 мегами памяти на борту. Влезет все!
Это хорошо! Значит со звуком проблем нет.
По графике - только обычный ZX экран.
А как же отличать кланы? В стандартном цвете много не нарисуешь. А без цвета не интересно.
Тоже не надо ничего придумывать; все уже сделано и сделано очень качественно. При всем при этом, цена готового изделия минимальная и подъемная.
С этим я не спорю.
Evgeny Muchkin
21.06.2009, 19:15
В стандартном цвете много не нарисуешь.
Потому это и Speccy, а не пц.
Клоны? Даже на казалось бы стандартизированном режиме расширенной графики P1024SLv2.2 особо не порисуешь... вернее, порисовать то, конечно, можно, и даже очень; но вот потом подвигать это, в игровом процессе процессорного времени не хватит на действительно красивую картинку.
Покупать надо, если есть игры под нее. Пока наверно она есть не у всех, а AY- у многих.
Ну для обычной GS игр, да и софта предостаточно, соответственно и под NeoGS ровно столько же на данный момент.
AY - да! AY всегда рулит! (жаль тока, что мои домашние этого не понимают ;)) , но качественных голосовых эффектов из неё не выжмешь. :(
Потому это и Speccy, а не пц.
Но ведь это сокращает количество написанных игр.
Клоны? Даже на казалось бы стандартизированном режиме расширенной графики P1024SLv2.2 особо не порисуешь... вернее, порисовать то, конечно, можно, и даже очень; но вот потом подвигать это, в игровом процессе процессорного времени не хватит на действительно красивую картинку.
А если была бы видеокарточка типа NeoSCR ? Конечно не Open GL, а что нибудь простое для ускорения до скорости как при работе со стандартным экраном.
Интересен порядок операций с графикой для игры типа WARCRAFT 2.
Ну для обычной GS игр, да и софта предостаточно, соответственно и под NeoGS ровно столько же на данный момент.
AY - да! AY всегда рулит! (жаль тока, что мои домашние этого не понимают ;)) , но качественных голосовых эффектов из неё не выжмешь. :(
Мои домашние тоже не понимали, когда я слушал демки.
Напрашивается такой вопрос: можно ли выдумать игрушку, которая:
a) ничего не теряла бы по существу от того, что реализована в рамках аппаратных возможностей Спектрума, как в случаях с Jumping Jack и Ms. Pacman но при этом
b) предлагала бы достаточное разнообразие игровых ситуаций, чтобы не быть игрушкой на один день, как в случае с Warcraft.
На мой вкус, Lode Runner приближается к этой формуле. Но вот попробуйте выдумать что-нибудь новое... ;-)
Aprisobal
22.06.2009, 01:40
Наконец понял, что хочет ТС. Тему нужно перенести в раздел железа?
ИМХО(и ближайшее время это мнение не изменится) железо Спектрума менять ни в коем случае нельзя, каким он был (128кб/AY), таким и должен остаться.
Я бы хотел: аппаратный довесок для выхода в сеть Интернет - со своей стороны доработал бы для SquareMania автоматический постинг топ-очков, вместо генерации кода. Если такое уже разрабатывается, то прошу кинуть ссылку. Если уже реализовано и в эмуляторе, то тоже интересно.
ИМХО(и ближайшее время это мнение не изменится) железо Спектрума менять ни в коем случае нельзя, каким он был (128кб/AY), таким и должен остаться.
Естественно. Ибо это Спектрум. Железо развивается (в большинстве своем) в плане перехода на более современные комплектующие, расширение возможностей при сохранении стандарта и повышение удобства работы (HDD, CD-DVD, SD, SIMM, PC-keyb...). Эти продукты развития опционны и сути машинки не меняет, убери их - и ничего страшного не произойдет... Просто ковыряться с дискетами неудобно, да и старую кнопочную клавиатуру фик найдешь.
Какие аппаратные возможности нужны для запуска игр типа 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 как и шахматы игра вечная при условии что туда добавлять все больше разных карт.
Наконец понял, что хочет ТС. Тему нужно перенести в раздел железа?
Не надо в железо! Я как железячник хочу узнать мнение программистов игр.
ИМХО(и ближайшее время это мнение не изменится) железо Спектрума менять ни в коем случае нельзя, каким он был (128кб/AY), таким и должен остаться.
Пока Спек не изменится новых игр будет мало.
Я бы хотел: аппаратный довесок для выхода в сеть Интернет - со своей стороны доработал бы для SquareMania автоматический постинг топ-очков, вместо генерации кода. Если такое уже разрабатывается, то прошу кинуть ссылку. Если уже реализовано и в эмуляторе, то тоже интересно.
Это тоже аппаратная доработка.
---------- Post added at 20:09 ---------- Previous post was at 20:07 ----------
По теме сабжа и по теме Поста №1 сказать пока нечего, но можно маленький оффтоп: почему этот сабж не соответствует посту №1 ? а то люди могут зайти в тему, ожидая вопросов про НАПИСАНИЕ игр, а тут вопросы про ЗАПУСК...
Попробую по-другому задать вопрос:
- Какие минимальные доработки ZX Spectrum приведут к резкому увеличению количества и качества игр?
Интересен порядок операций с графикой для игры типа 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
по-моему все это ерунда...
либо пишутся игры под стандартные спектрумы сейчас, что практикуется например в испании, либо спектрум как платформа загнется в екс-СССР.
количество желающих написать игры под имеющееся железо - невелико, что уж говорить о более сложном железе.
Какие минимальные доработки ZX Spectrum приведут к резкому увеличению количества и качества игр?
Перелепить наклейку от Спектрума на корпус PC, добавить "z" слева от "x86" и подать общественности как ребрендинг и переход, вслед за Apple Mac, на "наиболее перспективную аппартную платформу".
Сегодня Спектрум, кроме ностальгических мотивов, интересен именно тем, что под него уже создано большое количество софта, по большей части бесплатного. У меня ребенок младшего школьного возраста проявляет большой интерес к игрушкам, запускаю ему на эмуляторе. Но вот новое писать -- если только демонстрировать свою изворотливость и техническую подкованность в тонкостях архитектуры, а объекта творения для этого за пределами жанра демонстрации не найдется.
по-моему все это ерунда...
количество желающих написать игры под имеющееся железо - невелико, что уж говорить о более сложном железе.
А если сделать такое железо, которое упрощает и ускоряет вывод на экран - блиттер, например? Тогда не надо будет использовать всякие ухищрения, которые могут отбить желание у начинающих.
Сижу читаю и грустно :) Вот если бы то да это, а если бы еще и вот так тогда ух какое бы написали. А на самом деле даже в существующих рамках было создано много шедевров игровых, которые вообще считались для спектрума нереальными. Так что имхо самое главное что нужно для написания игры - это идея и желание :)
bigral, zst, был в свое время проект с подключением чипа от приставки, который все эти фишки мог делать, чем это закончилось - ничем, т.к. слишком много надо было ковырять и не ко всем клонам можно было подключить. В итоге - вроде и есть оно, но только у одного.. двух.. трех.. - кто то будет ради них затевать проект ?
bigral, zst, был в свое время проект с подключением чипа от приставки, который все эти фишки мог делать, чем это закончилось - ничем, т.к. слишком много надо было ковырять и не ко всем клонам можно было подключить. В итоге - вроде и есть оно, но только у одного.. двух.. трех.. - кто то будет ради них затевать проект ?
Может и будет при условии что все определятся со списком СОФТ-а который что называется ВСЕ ХОТЯТ! Ато вот в разделе СОФТ завел тему о том какого же софта нехватает для спекки и пока список этого софта непросматривается никак. IDE и компиляторы - зачем чтоб опять писать IDE и компиляторы? browser - он точно всем очень нужен? ну тогда пожалуй будет кандидат в список. Короче такое впечатление пока что софт новый либо ненужен либо не очень то нужен. А пока ненужен софт о железе совсем рано говорить, а иначе выйдет железо и пойдут бестолковые демы под него клепать никому ненужные.
Aprisobal
24.06.2009, 13:18
... а иначе выйдет железо и пойдут бестолковые демы под него клепать никому ненужные. Не согласен, за счет демомейкинга Спектрум только и живет.
может просто засунуть спек в мегамашину Romanich'а? там вам и мп3 будет и что угодно. но ситуации это не поменяет. ибо deadlock в развитии спека, связанный с деньгами.
Aprisobal
24.06.2009, 18:15
ибо deadlock в развитии спека, связанный с деньгами. Здесь, начиная с поста 203935, хочу помочь выйти из "deadlock"'a, но народ не пробиваем. Не подключишься к обсуждению?
Аппаратные доработки Спектрумов выпущенных более 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.
Когда-то я написал две игры в машинных кодах и на Бейсике и адаптировал одну с другого компьютера.
Было это очень давно и игры тогда были простые.
"PIF-PAF". Компьютер "Радио-86РК", машинные коды КР580ВМ80А. Два пистолетика двигаются вверх-вниз и стреляют друг в друга сквозь кактусы. Псевдографика.
"Перейди автотрассу". Компьютер "Радио-86РК", Бейсик. Несколько полос дороги с разным направлением, скоростью и промежутками между "машинами". Нужно добраться на другую сторону.
"ZOO". Компьютер "Радио-86РК", машинные коды КР580ВМ80А. Адаптация игры с компьютера "Специалист" с заменой знакогенератора в ПЗУ "Радио-86РК" (установка РФ2). Снежный человек бегает по этажам, лестницам и турникам и собирает чайники. Ему мешают два полицейских. Можно делать ямы, которые со временем зарастают. Иногда вместе с полицейскими.
Позвольте задать еще несколько вопросов.
Допустим, я все-таки захотел начать писать игры.
Где мне взять сценарий игры, которую можно реализовать на Спектруме.
И что делать дальше. Умею писать алгоритмы и реализовывать их на ассемблере, Бейсике или С.
Тема интересна тем, что я в ней почти ничего не знаю. Про трудности и т.п.
И может люди начнут коллективно писать игры, а не демы.
Допустим, я все-таки захотел начать писать игры.
Где мне взять сценарий игры, которую можно реализовать на Спектруме.
как вариант конверсия с cpc,msx,sms,gg того чего нет на zx. у всех процессор z80 - значит в коде разобраться проще
cherkasy
14.12.2010, 20:04
попробуй сделать например продолжение какой-то игры или усовершенствуй в ней что-то...
посмотри на новый игры, написанные для конкурса "Твоя Игра" или например с сайта WOS
moroz1999
15.12.2010, 11:29
Я, возможно, скажу глупость, но сценарий - не первый приоритет. Работоспособный движок игры - вот первый приоритет.
Рекомендую сначала наладить мини-демо игрового процесса. После этого можно и художников поспрашивать, и сценаристов поискать.
Я, возможно, скажу глупость, но сценарий - не первый приоритет. Работоспособный движок игры - вот первый приоритет.
Рекомендую сначала наладить мини-демо игрового процесса. После этого можно и художников поспрашивать, и сценаристов поискать.
Так какую игру делать то? Сценарий нужен.
И, например, делаю стрелялку. Надо выбрать вид летающего/ходячего объекта. И самое главное - как появляются препятствия/враги чтобы и герой умирал не часто и пройти было возможно и стрелять было в кого.
Ну чтобы играть было интересно. Даже без звука.
---------- 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 - под него даже редактор уровней был.
Если я правильно понимаю, исходников 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, мороз я имел ввиду прикол танчиков именно в поддержке мультиплеера по инету вдвоем. Включил реал, загрузил танчики, подключится к серверу, поставил заявку на ожидание, к тебе подключился товарисщ с удаленки и поехали вдвоем наводить конституц. порядок :) Это раньше легко было зайти к другу в гости после школы чтобы поиграть с клавы+джойстик, а сейчас тока инет
Так какую игру делать то? Сценарий нужен.
ИМХО, начать стоит с выбора игровой механики, задать "правила игры". Для спектрума как для аркадной машины это важно. Механика и заданные в ней свободы игрока определят объем кодинга. Причем, используя готовые принципы в нестандартной обстановке, можно родить вин (например, Зума, использующая гибрид механики тетриса и лайнс на необычном поле). Я, кстати, не видел клона Зумы на спеке...
Потом надо выбрать сеттинг (игровые реалии, объекты, персонажей), продумать взаимодействие объектов.
Потом написать сценарий (внятно объяснить смысл действия, его предпосылки, развязку, реплики персонажей).
Потом нарисовать графику (задники, спрайты, заставки).
Потом написать музыку (скажу по себе - качество звукового сопровождения во многом определяет впечатление от игры).
А потом - кодить, кодить, кодить...
Так какую игру делать то? Сценарий нужен.
ИМХО, начать стоит с выбора игровой механики, задать "правила игры". Для спектрума как для аркадной машины это важно. Механика и заданные в ней свободы игрока определят объем кодинга. Причем, используя готовые принципы в нестандартной обстановке, можно родить вин (например, Зума, использующая гибрид механики тетриса и лайнс на необычном поле). Я, кстати, не видел клона Зумы на спеке...
Потом надо выбрать сеттинг (игровые реалии, объекты, персонажей), продумать взаимодействие объектов.
Потом написать сценарий (внятно объяснить смысл действия, его предпосылки, развязку, реплики персонажей).
Потом нарисовать графику (задники, спрайты, заставки).
Потом написать музыку (скажу по себе - качество звукового сопровождения во многом определяет впечатление от игры).
А потом - кодить, кодить, кодить...
null_device
16.12.2010, 09:11
Wolf был весьма играбельным.
Что осталось сделать и где уже сделанное ?
Демо версия от DR тоже вполне играбельна при том, что игровой движок работает в цвете и спрайты не выглядят как "чанки", в том же Wolf.
Маловероятно, что исходный код когда-либо выкладывался в открытый доступ. В виде бета релиза, лежит в приложении к 22 Spectrofon'у.
Танчики - хороший вариант. На 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 направлений движения, если нет препятствий.
Допустим, я все-таки захотел начать писать игры.
Где мне взять сценарий игры, которую можно реализовать на Спектруме.
Вот это-то и есть главное. Сценарий должен быть. А всё остальное (знание архитектуры компьютера, машинных кодов, написание или нахождение "движка", создание графики и музыки и т.д.) "приложится". При особом желании "приложится", даже если нет талантов в чём-то (например, в музыке) - при наличии одержимости удастся даже создать коллектив, пусть всего на один проект. Ну и ещё нужно будет терпение :) .
Дополнительные возможности для Танчиков. Выбор ботов с возможностью создавать своих. Снабдить их искусcтвенным интеллектом, который можно запрограммировать вручную. Но чтобы бот на стороне компьютера не знал нашего места положения, а действовал только на основе той информации, которую видит через препятствия. Если ему не предоставит дополнительную информцию какой-нибудь вертолет-разведчик.
Хотя нет. Пусть видит все поле. Ведь мы же будем видеть.
---------- Post added at 13:26 ---------- Previous post was at 13:12 ----------
Может будет интересна автономная битва ботов, запрограммированных двумя людьми.
Но такое будетв возможно только в будущем. И просто смотреть не особо интересно...
Но результат игры почти случаен.
Благодаря тому, что механика игры допускает многоуровневые комбо, Зума становится чуть ли не стратегической игрой.
Что можно изменить в Танчиках, чтобы играть стало интереснее?
Можно добавить элемент "поиска предметов в лабиринте" - не показывать игроку всю карту, а только фрагмент. При этом уменьшить скорость перемещения. Это даст интерес исследования. Была похожая игра на спеке - Vectron. Там убиение танчиков вообще от первого лица.
Можно, как ты сказал, добавить баллистику, например, в виде еще одного бонуса - все танчики, включая свой, останавливаются на время, при этом игрок может (на манер Scorched Earth) навести выстрел в любую точку карты.
Чтоб добавить элементы Варкрафта, надо сделать командную систему со строительством, дружественный ИИ.
Снабдить их искусcтвенным интеллектом, который можно запрограммировать вручную. Но чтобы бот на стороне компьютера не знал нашего места положения
ИМХО, надо делать на основе волнового алгоритма в 2 уровня - поиск противника/игрока на небольшое расстояние, если не нашел - поиск пути до вражеской базы.
null_device
16.12.2010, 13:17
ИМХО, надо делать на основе волнового алгоритма в 2 уровня - поиск противника/игрока на небольшое расстояние, если не нашел - поиск пути до вражеской базы.
Такой способ требует много памяти и машинного времяни. Намного логичнее использовать методы "поиска цели" и трассировки маршрута движения, детально описаный Copper Feet, для ЧВ..
Гы, можно сделать респавнящегося через некоторое время танка-инженера. Неплохо бронированного, но безоружного. Он восстанавливает свою половину карты, если свой и чужую, если чужой. Игрок будет вынужден защищать его, чтоб восстановить свои укрепления и стараться уничтожить вражеского инженера.
---------- 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/) более развернуто, и ссылки на похожие материалы..
Ааааа! PC-пользователи атакуют Spectrum!
Если у вас будет все необходимое железо, то вскоре придете к выводу, что полученное изделие получается похожим на IBM-PC. Появится мысль - зачем что-то там паяли и очень старались?
Интересной/играбельной может быть как текстовая бродилка, так и графическая Elite и многие другие. Вообще, имхо, на Спектруме нужна голова и желание, тогда ограничение в железе почти не почувствуется (да, согласен, с кассетой далеко не уехать, дисковод все-таки нужен, или HDD, лишь для того, чтобы сэкономить время на компиляцию/загрузку/отгрузку исходников).
Segfault
23.12.2010, 16:20
а можно и так предположить Если все железо будет то можно придти к выводу, что PC не обязательно включать сегодня ("потом включу..."), а оставшись тетатет со спеком возникнет вопрос/спрос "а где же новый софт". И "Надо написать!". Пара строчек на бейсике забытая раскладка клавы и вот уже начигачен "шедевр". Среди таких шедевристов начнется конкуренция и тогда руки у рук появится возможность привыкнуть к написанию прог/их юзанию, а не тупому флужению. А если и флудению то через браузер на спеке. Но тогда придется ресетать комп и все такое. И тут появится востребованность оси.. и тд.
null_device
23.12.2010, 16:24
Абсолютно согласен! Ибо эскалация производительности (в основном, железа) для корректной работы новых програмных продуктов - чисто коммерческий подход (который наблюдаетс в нише РС), по "выдавливанию" средств из конечного потребителя, т.е. нас с вами.
По-моему правильней было бы создавать программу под железо, а не наоборот. И использовать опционально, дополнительные возможности: больший обьем памяти, звуковые устройства, видео режимы и т.п., не забывая о потдержке "стандартной, минимальной комплектации".
Ааааа! 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 я создавал за пару-тройку дней.
А программировать на голом ассемблере на голом Спектруме на голом энтузиазме сейчас очень мало желающих.
ИМХО, в наше время для ускорения и облегчения процесса разработки игр необходим компилятор 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.
Название будущей игры:"FUTURE TANK"
Легенда.
После Эры Войн, когда было разрушено большинство городов Земли, наступила Эра Возрождения 2. Люди переселились в районы с теплым климатом, туда, где еще остались клочки живой природы. На остальной территории Земли были построены автоматические заводы для изготовления всего нужного для жизни и отдыха людей. Так как людям было нечего делать, они занялись поэзией, живописью, гимнастикой и другими видами искусства и спорта.
Но однажды, во время легкого землетрясения, недалеко от одного из городов-заводов провалился люк уцелевшего с Эры Войн секретного подземного бункера. Свет, попавший в бункер, запустил процесс расконсервации и подзарядки автономной боевой техники, ранее принадлежавшей одной из армий Земли.
Процесс этот занял достаточно много времени, так как сначала требовалось развернуть электростанции нескольких типов: солнечной, атомной и еще одного экспериментального типа.
Но, так как в городе никто из людей не жил, то пока обнаружили, что город-завод был перенастроен на выпуск новых экземпляров самоходных боевых установок прошло много времени. Армия, запрограммированная на уничтожение, направилась в сторону обжитых районов Земли.
Когда люди узнали об этой беде, ученые срочно занялись созданием боевой машины, способной противостоять древней технике. И они создали ее, но ресурсов хватило только для изготовления одного экземпляра. Справится ли танк будущего со своей миссией - покажет время...
--------------------------------------------------------------
Следующим этапом будет рисование спрайтов техники.
Предполагается размером около 16 x 16 точек со смещенным центром. Цвета 2-3 на спрайт.
Потом изучение способов отображения двужущихся с разной скоростью объектов.
Скорее всего после прерывания будет считываться из буфера адрес спрайта 8x8 точек в ОЗУ спрайтов и адрес в ОЗУ экрана, куда надо скопировать 8 байтов. Из другого буфера будут копироваться атрибуты.
Основное время будет затрачиваться на рассчет передвижения объектов, адресов в ОЗУ спрайтов и экрана, и запись их в буфер для быстрого копирования во время прерывания.
Потом эксперименты с ручным управлением танком.
Параллельно с техническими вопросами нужно будет разработать правила игры и алгоритмы передвижения противников.
zst, Неплохая легенда, перекликается с сюжетом ПЦ-шной игры "Hostile Waters: The Antaeus Rising"
Andrew771
16.01.2011, 21:39
С ненаписанным Z тоже :)
А еще - с книжкой Кира Булычева "Ржавый фельдмаршал".
Можно поэтому назвать аватару игрока АЛИСА - Адаптивная Левитационная Интеллектуальная Самоходная Артиллерия :)
В проставках между уровнями можно сделать диалоги боевой машины будущего и искусственного интеллекта базы, на уровне обмена мыслями о природе человеческой вражды, смысла существования самих этих машин. Еще можно каждый диалог заключать ходом шахматной партии - тогда в конце игры машина будущего поставит призраку войны мат :)
ИМХО, начать стоит с выбора игровой механики, задать "правила игры". Для спектрума как для аркадной машины это важно. Механика и заданные в ней свободы игрока определят объем кодинга.
Экран Спектрума вводит ограничения по цвету, поэтому задача выбора механики движения упростилась. Объекты будут передвигаться в пределах одного экрана по-вертикали и по-горизонтали.
Потом надо выбрать сеттинг (игровые реалии, объекты, персонажей), продумать взаимодействие объектов.
Не хотелось бы, чтобы герой умирал от первого попадания в него и возвращался на 1 уровень. Поэтому, можно сделать защиту, которая принимает на себя первые несколько повреждений. Враги пусть будут без защиты или с защитой от одного вида оружия - их больше.
Вообще мне бы хотелось, чтобы можно было выбирать оружие.
Например, 9 видов оружия, 3 группы по 3. Отображать справа на экране ярким цветом выбранное оружие. 3 группы - 3 вида энергии.
Еще надо решить вопрос подзарядки защиты и оружия - собирать или оно само постепенно должно восстанавливаться.
Предполагается, что вражеские объеты - танки (двигаются медленно, могут ехать по мелким препятствиям) и БТР (могут ехать только по ровной дороге, но быстрее).
Главный герой - машина на антигравах (можете ездить быстро даже по мелким припятствияи и через ямы).
Потом написать сценарий (внятно объяснить смысл действия, его предпосылки, развязку, реплики персонажей).
С этим сложнее - нужна помощь. Графика - это проекция сюжета на экран монитора/телевизора. ELITE была интересна сюжетом при упрощенной графике на экране.
Скорее всего нужны разные миссии типа:
1. Продержаться 2 минуты и не умереть.
2. Нейтрализовать за 5 минут 25 объектов.
3. Сопровождать какой-нибудь объект типа транспорта с продуктами, пока он едет по заданному пути.
...
Потом нарисовать графику (задники, спрайты, заставки).
Пытаюсь наприсовать цветные спрайты, пока на бумаге в клеточку.
Потом написать музыку (скажу по себе - качество звукового сопровождения во многом определяет впечатление от игры).
А потом - кодить, кодить, кодить...
Пока не знаю как делать звук.
---------- Post added at 11:04 ---------- Previous post was at 10:41 ----------
Наверно нужно писать сценарий для каждого экрана с учетом размера игрового поля, типов препятствий, скорости движения и т.д.
Например, на некоторых уровнях можно разместить препятствия, которые не уничтожаются оружием. Чтобы временно оно опустилось надо нажать кнопку. При этом нужно учитывать в сценарии расстояние от кнопки до открывающегося прохода - чтобы можно было успеть.
Кроме этого, нужно расписать - когда и где появляется очередной враг и с какими характеристиками. Тут нужно сделать так чтобы пройти уровень было и не просто и не слоожно, но не с первого раза...
Не хотелось бы, чтобы герой умирал от первого попадания в него и возвращался на 1 уровень. Поэтому, можно сделать защиту, которая принимает на себя первые несколько повреждений. Враги пусть будут без защиты или с защитой от одного вида оружия - их больше.
Вообще мне бы хотелось, чтобы можно было выбирать оружие.
Например, 9 видов оружия, 3 группы по 3. Отображать справа на экране ярким цветом выбранное оружие. 3 группы - 3 вида энергии.
Еще надо решить вопрос подзарядки защиты и оружия - собирать или оно само постепенно должно восстанавливаться.
Имхо, здоровье (щит) при таком соотношении сил должно состоять из нескольких единиц и постепенно регенерировать, иначе аптечек не наберешься.
Оружие лучше сделать заряжаемым у соответствующей электростанции. Тогда на каждой карте будет 3 ключевые точки разной важности, в зависимости от типа танков.
При трех индикаторах оружия их лучше, наверное, сделать цифровыми и поставить сбоку по вертикали.
3. Сопровождать какой-нибудь объект типа транспорта с продуктами, пока он едет по заданному пути.
Мне думается, что один экран маловат, чтоб проложить мало-мальски длинную дорогу в 2 танчика шириной (чтоб была возможность защищать со всех сторон). Либо надо очень замедлить транспортник.
Предполагается, что вражеские объеты - танки (двигаются медленно, могут ехать по мелким препятствиям) и БТР (могут ехать только по ровной дороге, но быстрее).
Главный герой - машина на антигравах (можете ездить быстро даже по мелким припятствияи и через ямы).
Подходяще, так игрок сможет использовать разницу возможностей для построения тактики игры. Надо учесть это на карте (сделать водные преграды, расстреливаемые обломки, нерасстреливаемые корпуса базы и скалы). Интересно может быть, если сделать сарайчик 16х16, в который игрок может заехать и таким образом скрыться на время от проезжающего танка.
а вставка вертикального сролинга экрана сильно повлияет на сложность проекта?
---------- Post added at 09:30 ---------- Previous post was at 09:29 ----------
для миссия типа сопровождения было бы замечательно.
Навскидку придумал еще один тип миссии, на механике Пакмана:
За игроком по карте гоняется один-единственный танчик-босс, неуязвимый для всех типов оружия, кроме одного. Но, как назло, именно это оружие у игрока неактивно. По карте разбросаны обломки. Если их расстреливать, то под некоторыми возникают части оружия. Надо собрать 3 части оружия и расстрелять босса.
Навскидку придумал еще один тип миссии, на механике Пакмана:
За игроком по карте гоняется один-единственный танчик-босс, неуязвимый для всех типов оружия, кроме одного. Но, как назло, именно это оружие у игрока неактивно. По карте разбросаны обломки. Если их расстреливать, то под некоторыми возникают части оружия. Надо собрать 3 части оружия и расстрелять босса.
Да, это было бы интересно для разнообразия.
А как вам возможность записи демы прохождения уровня ?
Ну типа записать когда и какие клавишы были нажаты и чтобы компьютер эту последовательность обрабатывал так же как и реальное нажатие. Наверно тут основная проблема в размере этого файла.
---------- Post added at 12:49 ---------- Previous post was at 12:45 ----------
а вставка вертикального сролинга экрана сильно повлияет на сложность проекта?
для миссия типа сопровождения было бы замечательно.
Пока не знаю.
Нужно будет решить как отображать большую карту на игровое поле, когда будет включаться скроллинг, на сколько точек зараз делать скроллинг (самый простой на 8).
Скорее всего плавности не будет.
Еще возможное количество врагов увеличится - как ими всеми управлять?
А как вам возможность записи демы прохождения уровня ?
Ну типа записать когда и какие клавишы были нажаты и чтобы компьютер эту последовательность обрабатывал так же как и реальное нажатие. Наверно тут основная проблема в размере этого файла.
Здорово.
Скорее всего плавности не будет.
А ее и не надо - сделать перемещение в момент перехода транспортом границы экрана. На целый экран вверх или чуть меньше.
Еще возможное количество врагов увеличится - как ими всеми управлять?
Разграничить поле непреодолимыми для врагов преградами (волны нападения) и забивать на невидимых врагов (бо они нас уже не достанут).
---------- Post added at 12:16 ---------- Previous post was at 12:14 ----------
Или тормозить транспорт при каждой волне танков, пока они все не будут уничтожены.
null_device
17.01.2011, 11:32
Если ландшафт будет появляться целыми локациями (экранами), можно взять внешний вид и "механику" tankodrom'а.
как ими всеми управлять?
Логичнее, пока вражеские юниты не видны на игровом экране, они "не активны", при "входе" в локацию, пытаются "сравнять" координату Y\X с вашей и выстрелить (возможны варианты :) ).
Если имеет место "приемущественное" направление прохождения уровня (горизонталь\вертикаль), имеет смысл выставить "порог срабатывания", т.е. минимальной дистанции, при преближении к которой, вражеские юниты "включаются".
Или тормозить транспорт при каждой волне танков, пока они все не будут уничтожены.
транспорт медленно движется по дороге и застывает в центре пока не уничтожена вся волна дальше не двигается.
Транспорт пугается и едет в некоторое укрытие, где стоит и ждет. противнику видно, где стоит транспорт
Транспорт пугается и едет за пределы экрана, оставляя игрока наедине.
Если транспорт на границе, то можно покинуть локацию, не убивая всех. поведение рандомно.
?
---------- 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 ----------
ну и транспорт тупо едет без противников
...А еще - с книжкой Кира Булычева "Ржавый фельдмаршал".
Можно поэтому назвать аватару игрока АЛИСА - Адаптивная Левитационная Интеллектуальная Самоходная Артиллерия :)
А еще с фильмом "Пираньи".
После небольшого землетрясения возникла трещина на дне озера, куда приехала купаться молодежь на ежегодный праздник. Под озером было еще одно озеро, в котором жил вид рыбы, которая уже давно вымерла в наземных озерах. Более быстрый молодняк выплыл наружу и стал уничтожать все живое.
Шериф предупредил, чтобы все вылезли из воды. Но не сказал, что конкретно произошло. Кто не послушался - того съели пираньи.
C ними научились бороться с помощью ружей, электрошокера, мотора от моторной лодки, глушили с помощью взрыва лодок. Спрособов много. В конце-концов наши победили. Но это оказались лишь мальки...
Я вот думаю - спрайт 24х24 получится детализованнее, причем, в данном случае это скажется и на детализации карты тоже.
Какая сетка лучше?
24066
24067
16х16
---------- Post added at 17:20 ---------- Previous post was at 17:15 ----------
24 слишком крупно на мой взгляд
В 16 получаются весьма условные элементы. Мне кажется, при толковом дизайне карт + переход в соседние сегменты 24 будет выигрышнее.
насчет оружия... 9 много, 3-4 хватит: обычный, одиночный усиленный, двойной(шире, мощность как у одиночного усиленного), тройной(еще шире).
---------- Post added at 20:34 ---------- Previous post was at 20:26 ----------
кстати, возможно стоит почерпнуть идей тут?
http://www.ag.ru/reviews/tank_o_box
Вариант:
фугасный снаряд: отклоняется электромагнитными щитами, плохо пробивает броню, поражает более 1 клетки (для обстрела БТР-ов).
Плазменная граната: отражается электромагнитными щитами, прожигает броню. Для обстрела тяжелых танков.
Электромагнитная бомба: Уничтожает щиты, против брони неэффективна. Для обстрела танков-штурмовиков.
Серая слизь: снаряд, начиненный микродизассемблерами. Действует не сразу, но гарантированно фатален.
Тактический ядерный боеприпас: Зловещий артефакт из прошлого. Очень редко можно найти в обломках на базе. Большой вес не позволяет стрелять прямой наводкой, а только по параболе. Имеет площадной эффект.
тогда фугас жрет броню, но убавляет немного и щиты, а электромагнитная наоборот, мало ли кончатся заряды:)
---------- Post added at 21:53 ---------- Previous post was at 21:47 ----------
ну и для боссов режим пакмана, спейс инвайдерс и прочие тени прошлого:)
Вот первая попытка нарисовать спрайты в программе 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 и преобразовать в спрайты Спектрума пока не знаю.
Вариант:
фугасный снаряд: отклоняется электромагнитными щитами, плохо пробивает броню, поражает более 1 клетки (для обстрела БТР-ов).
Плазменная граната: отражается электромагнитными щитами, прожигает броню. Для обстрела тяжелых танков.
Электромагнитная бомба: Уничтожает щиты, против брони неэффективна. Для обстрела танков-штурмовиков.
Серая слизь: снаряд, начиненный микродизассемблерами. Действует не сразу, но гарантированно фатален.
Тактический ядерный боеприпас: Зловещий артефакт из прошлого. Очень редко можно найти в обломках на базе. Большой вес не позволяет стрелять прямой наводкой, а только по параболе. Имеет площадной эффект.
Я предполагал типа как в DOOM2: энергия общая, а размер заряда и повреждения разные.
Например, очередь из синих квадратиков мало тратит, а если пальнуть из зеленого BFG, то полного заряда хватит на два выстрела. Зато пол-экрана одноклеточных объектов в пределах прямой видимости можно уничтожить. Или, например, окружают со всех сторон - тогда что-то типа NOVA из DIABLO - голубое разбегающееся кольцо/квадрат молний. Или третье электрическое оружие - например, красный лазер.
Также и с оружием огня - можно использовать FIREBALL/огнемет/кольцо огня
энергия общая
Я бы все-таки заюзал тот факт, что задумано 3 типа энергостанций. Расширяет тактическую составляющую
---------- Post added at 11:50 ---------- Previous post was at 11:48 ----------
Поэтому дуло ему не нужно.
Дуло очень нужно, иначе будет непонятно, чем оно стреляет (не из дырки же для ружья), да и на танк будет непохоже.
Я бы все-таки заюзал тот факт, что задумано 3 типа энергостанций. Расширяет тактическую составляющую
Почему бы нет. Если энергия тратится на защиту и оружие ее надо где-то брать. Самое главное сбалансировать общий заряд, затраты на защиту при попадании, затраты энергии на каждый выстрел и т. п.
Дуло очень нужно, иначе будет непонятно, чем оно стреляет (не из дырки же для ружья),
Тогда корпус нужно сделать одноцветным с черными точками, которыми можно нарисовать дуло. Есть какие-нибудь предложения по внешнему виду корпуса размером 8х16 точек максимум? Два цвета, один из них - черный.
да и на танк будет непохоже.
В принципе оно и не должно очень быть похоже на танк.
На танки должны быть похожи враги.
zst, мож так?24094
черные точки на хвосте имитируют раскраску опасной техники.
Вариант корпуса 16х162409524097
Все-таки колеса/антигравы нужно сделать другого цвета иначе все будет однотонное.
В корпус 8х16 или короче тогда надо будет втиснуть башню, которую можно будет поворачивать на 360 градусов. Например кружок размером 8x8 и с одной стороны прорезь или черное пятнышко, снаряд все равно будет изображаться вне спрайта объекта. Конечно, понятнее, когда видно куда башня повернута. Но если не получится - тогда двухцветный корпус без башни.
Наверно надо, чтобы по цвету врагов можно было определить, какой энергией они пользуются для защиты и оружия.
Наверно надо, чтобы по цвету врагов можно было определить, какой энергией они пользуются для защиты и оружия.
Точно.
В корпус 8х16 или короче тогда надо будет втиснуть башню, которую можно будет поворачивать на 360 градусов.
А зачем? Можно сделать неподвижный ствол и вращать спрайт целиком в сторону стрельбы. Машина-то на антигравах, она вполне может ехать боком и задом, ей все равно.
---------- Post added at 13:50 ---------- Previous post was at 13:46 ----------
Все-таки колеса/антигравы нужно сделать другого цвета иначе все будет однотонное.
Я что-то слабо представляю. В спрайте 4 знакоместа, в каждом из которых может быть только по 2 цвета, один из них черный. Максимум можно сделать перед одного цвета, а зад другого, или шахматную раскраску.
Я что-то слабо представляю. В спрайте 4 знакоместа, в каждом из которых может быть только по 2 цвета, один из них черный. Максимум можно сделать перед одного цвета, а зад другого, или шахматную раскраску.
Я предлагаю сделать спрайт размером 16х16 точек, но занимать он будет 6 или 9 знакомест:
123
456
789
Корпус занимает знакоместа 4,5,6.
Гусеницы, колеса, антигравы занимают по пол-знакоместа 1,2,3,7,8,9. То есть у них свой цвет+черный.
Концепт :)
2411024111
2411224113
Концепт :)
2411024111
2411224113
Женица вам надобно, барин.
Женица вам надобно, барин.
Вот и программисты подтягиваются.
Как нам из этих рисунков спрайтов наделать и заставок ?
А что - хороший летающий танк получился. До чего дошел прогресс...
Вот и программисты подтягиваются.
C юбилеем.
http://img39.imageshack_.us/img39/2388/zst1000.jpg
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 битах). Буфер можно увеличить/уменьшить в зависимости от размера и изрезанности предполагаемых препятствий.
Подумываю продолжить разработку игры. Если игровое поле больше, чем один экран, в какой момент обычно делают передвижение экрана ? Для игры типа танчики.
Crash Nicker
15.07.2013, 22:18
Подумываю продолжить разработку игры. Если игровое поле больше, чем один экран, в какой момент обычно делают передвижение экрана ? Для игры типа танчики.
Ну, такое обычно применяется не только для "огроменных" танчиков, а и для игр-платформеров в духе... кхем, ладно, со скроллом. Тут два варианта:
1) Поэкранный скролл. Тут всё просто: заехали за край экрана - скролл до тех пор, пока другой экран не покажется полностью.
2) "Гоняющийся" скролл, он же chasecam. Схема такая: в середине квадрата, представляющим собой "рабочую" зону игры, рисуется ещё один воображаемый квадрат. Не даём нашему танку за него выехать, не считая тех случаев, когда мы на границе карты. И кстати, делать этот воображаемый квадрат настолько же большим, как и окошко с геймплеем - ну очень плохая тенденция, я даже не буду рассказывать, почему. :)
2) "Гоняющийся" скролл, он же chasecam. Схема такая: в середине квадрата, представляющим собой "рабочую" зону игры, рисуется ещё один воображаемый квадрат. Не даём нашему танку за него выехать, не считая тех случаев, когда мы на границе карты. И кстати, делать этот воображаемый квадрат настолько же большим, как и окошко с геймплеем - ну очень плохая тенденция, я даже не буду рассказывать, почему. :)
Допустим окно геймплея 190x190 точек. Посередине воображаемый квадрат размером 100х100 точек, в котором танк может ездить без скролла экрана ? Если же он пытается выехать за этот квадрат, то экран сдвигается на... сколько ? С какой скоростью ? Как себя должны вести в это время все объекты на экране (двигаться или замереть)? Реагирует ли игра на клавиатуру или джойстик во время скролла экрана ? Какое положение танка должно быть после окончания скроллига? Список игр с таким скроллингом на World Of Spectrum можете перечислить ?
Список игр с таким скроллингом на World Of Spectrum можете перечислить ?
Vindicators ? http://www.worldofspectrum.org/infoseekid.cgi?id=0005581
С какой скоростью ? Как себя должны вести в это время все объекты на экране (двигаться или замереть)? Реагирует ли игра на клавиатуру или джойстик во время скролла экрана ?
-со скоростью движения "танчика";
-двигаться;
-реагирует
Танк наезжает на крайний ряд сетки - экран смещается на х-1 клеток, где х - ширина экрана. При этом все останавливается.
Crash Nicker
16.07.2013, 16:11
Допустим окно геймплея 190x190 точек. Посередине воображаемый квадрат размером 100х100 точек, в котором танк может ездить без скролла экрана ?
Да-с.
Если же он пытается выехать за этот квадрат, то экран сдвигается на... сколько ? С какой скоростью ? Как себя должны вести в это время все объекты на экране (двигаться или замереть)? Реагирует ли игра на клавиатуру или джойстик во время скролла экрана ?
Открою секрет Полишинеля. При "живом скроллинге" враги и инпут не должны замораживаться ВООБЩЕ. Первое - потому, что всю игру можно пройти, никого не убив (ибо все враги стоят истуканами), а это тупо. Второе - потому, что куда проще удерживать кнопку "вверх", чтобы наверх и идти без остановок, а не долбить её раз по триста. Что ещё более тупо.
Ну, тут можно пойти одним из двух путей:
* Ikari Warriors - скроллинг попиксельный, специально для игр, которые сплошь и рядом ч/б. Если скролл идёт либо только по горизонтали, либо только по вертикали, можно траву, море и песок отделить своими цветами. Более затратный с точки зрения тактов.
* Savage и другие игры от Дэйва Перри - скроллинг атрибутный, ибо вся графика тут цветастая и разукрашенная. :) Разумеется, все объекты (все) на экране передвигаются в пределах знакомест. Можно и для ч/б применять, благо это экономно с точки зрения ресурсов, чем скроллить медленно и плавненько...
Или скомбинировать их вот так:
* Чёрный Ворон - спрайты движутся попиксельно, а вот экран - поатрибутно...
* Игры от The Mojon Twins - ...ну или поэкранно, пардон за каламбур.
Какое положение танка должно быть после окончания скроллига?
Ну, поскольку мы не выезжаем за эти 100х100, то, вестимо, внутри этого квадрата; причём в какую сторону ехали, в такую и смотрим...
Спасибо. Понял, что пока танк пытается выйти из внутреннего квадрата, он как бы буксует на месте, а фон едет мимо него. Как только он остановится - сразу же остановится и фон.
Появилась идея собрать библиотеку из простых подпрограмм на ассемблере 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
Почему-то не приживаются библиотеки, все все равно используют свое. Могу выдвинуть гипотезу - часто разобраться в написанном сложнее, чем написать самому.
Всё даже проще. Если хочется хороший софт на спектруме - он должен работать всегда на пределе возможностей машины. Т.е., обычно не игры делают из библиотечных скроллов, а скроллы, всякий раз новые, подгоняются под конкретный дизайн игры, чтобы максимально оживить данную конфигурацию экрана и позволить побольше спрайтов и тайлов. Ну, или, если рождалась какая-то новая техническая идея, как скроллить побольше и поживее, делали дизайн игры под техническую идею. Это не от хорошей жизни происходило, но это так.
Допустим окно геймплея 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, вывод меню, математика, тысячи их...
Так оно бывает далеко не всегда. Да, графика - наибоее критичное место, грайические процедуры как правило пишутся разработчиком с нуля. Но есть еще куча всякого "сервисного" кода, который я переписываю каждый раз. Например: установка прерывания, инициализация музыки, дисковые операции, загрузка и запуск мелодии в 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, либо на отдельном сайте. В первом посту темы собирать - не дело. Если оно будет собираться, я готов делиться откомментированными процедурами. Опять же, будет контент, есть смысл прибить тему (возможно, в "Программировании").
Все это здорово. Только надо сделать либо в местной Wiki, либо на отдельном сайте. В первом посту темы собирать - не дело. Если оно будет собираться, я готов делиться откомментированными процедурами. Опять же, будет контент, есть смысл прибить тему (возможно, в "Программировании").
Для начала можно делать вложения по всей теме, а я в первом посту буду делать ссылки. Посмотрите примерно как - уже есть в первом посту.
Например:
Шрифты с русскими буквами: 1, 2, 3.
Процедуры печати букв: 1, 2, 3.
Тоже хороший вариант, только лучше, чтобы движение начиналось у края внутреннего квадрата. После этого все замирают и все быстро сдвигается на пол-экрана. Потом все оживают и танк тоже может ехать дальше.
Есть еще такая вещь как на тупой машине минимизировать подгрузки. Чем больше подгружается за раз, тем реже придется перерисовывать. В идеальном случае - целый экран, в реале - нужен еще краешек в одну клетку, чтоб игрок не терял ориентацию.
Alex Rider
18.07.2013, 11:58
Для начала можно делать вложения по всей теме, а я в первом посту буду делать ссылки. Посмотрите примерно как - уже есть в первом посту.
Плохо структурировать так. Получится громадный пост или куча спойлеров. Ты же хочешь большую коллекцию, верно?
Более дружественные игры запускаются сразу после нажатия кнопки FIRE. а мне такой вариант совсем не нравится,
поскольку в играх нет стандарта на раскладку кнопок.
хотя обычно подразумевается Q,A,O,P,SPACE/M или Z,X,K,M,SPACE.
лучше давать пользователю переназначение клавиш для управления
ещё часто встречается pause-H,abort-G
а самая грубая ошибка когда подразумевается наличие kempston joystick`a по дефолту.
Плохо структурировать так. Получится громадный пост или куча спойлеров. Ты же хочешь большую коллекцию, верно?
На мой взгляд сто строк в первом посту не так уж и много. Зато удобно и все в одном месте.
У меня есть сайт 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)
Уточнить кнопки, сделать стандартное меню для такого случая и больше не менять и время на это не тратить. Уже половина игры будет готова. Останется самую малость - спроектировать уровни и двигать объекты в соответствии со сценаирием и алгоритмом...
Хранение библиотеки подпрограмм на сайте.
Можно временно выкладывать файлы в этой теме. Потом почистим. Каждая подпрограмма должна быть в отдельном текстовом файле, в виде пригодном для копирования в основной файл программы на ассемблере. В одном посте влезает до 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
давайте добавим ещё время в имя файла.
так будет понятнее.
роботам :)
мне страшно вмешиваться даже, но хотелось бы заметить, что давно придуманы такие вещи как svn/git. они решают очень много проблем, и никаких "что если 2 человека выкладывают" даже близко не возникает...
introspec
18.07.2013, 23:12
мне страшно вмешиваться даже, но хотелось бы заметить, что давно придуманы такие вещи как svn/git. они решают очень много проблем, и никаких "что если 2 человека выкладывают" даже близко не возникает...
Ну почему же, люди пытаются переизобрести всю историю игродизайна, а вы о каком-то там svn переживаете. Ширше нужно брать, обстоятельнее, амбизиознее.
Насколько я понмю, уже была попытка создать библиотеку демомейкера... ну там скоролл был и ещё что-то очень нужное :) Запись мнемоники там была весёлая, почти в строчку... ну чтобы непонятнее было :)
А что за игру то пишут в этом треде? Танчики что ли? Их уже навалом в 90ых понаделали...
А что за игру то пишут в этом треде? Танчики что ли? Их уже навалом в 90ых понаделали...
Плюсую за последнюю фразу. Этой шняги и так уже навалом.
Crash Nicker
19.07.2013, 00:58
Плюсую за последнюю фразу. Этой шняги и так уже навалом.
А адекватных и вполне играбельных - штуки две. От силы. И то на одного игрока.
Но поскольку ещё и скролл местности, то что-то на уровне Great Tank точно намечается. Тоже не хит года, но Москва не сразу строилась...
Crash Nicker, а вот каждый буржуйсккий игродел, считает за честь сделать JSW. По этому этих модов уже за сотню перевалило. Если делать игру, то что-нибудь конкретное, а не барахло. Survivisection, Alter Ego или Sea Dragon тому примеры. А если автор задумал сделать очередную реинкарнацию танчиков, то нафиг они не нужны.
Ширше нужно брать, обстоятельнее, амбизиознее.
это еще страшнее... один только свн - был бы гигантский прогресс, серьезно.
introspec
19.07.2013, 02:57
это еще страшнее... один только свн - был бы гигантский прогресс, серьезно.
Я не понимаю, как можно серьёзно относиться к проекту "библиотеки для создания игр начинающими программистами", когда люди в проекте явно не слышали ни о AGD, ни о z88dk в связке с sp1. Одновременно с этим, предлагается писать бибиотеку со следующими "полезными" процедурами:
(*) Вывод звука на BEEPER.
(*) Вывод звука на AY/YM.
(*) Подпрограмму обработки прерывания.
(*) Другие полезные подпрограммы.
Это было бы дико смешно, если бы это не было так грустно. Уже один раз расподписался, но не удержался и прокомментировал. Сейчас расподпишусь ещё раз и больше сюда ни ногой.
Я не понимаю, как можно серьёзно относиться к проекту "библиотеки для создания игр начинающими программистами", когда люди в проекте явно не слышали ни о 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
Насколько я понмю, уже была попытка создать библиотеку демомейкера...
Библиотека демомейкера - утопия. Демо - демонстрация оригинальных разработок, а не умения собрать что-то из готового набора заезженных процедур и спрайтов.
Запись мнемоники там была весёлая, почти в строчку... ну чтобы непонятнее было
Потому что принималось все подряд. Никакой модерации, никакого интереса ни у кого.
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, может, от скудности ума.
А в играх много рутинного кода, который невидим пользователю и не задает специфику игры. Да, согласен, в некоторых играх нужен уникальный опрос клавиатуры, уникальные видеоэффекты, но очень много тривиальных процедур. Специфика игры - это оформление (графика и звуки) и логика, но не опрос клавиатуры, вывод спрайтов, текста, загрузка состояния, управление прерываниями и еще 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), правда, всё захлебнулось. :)
9 - в новой версии
девять чего?
---------- Post added at 19:30 ---------- Previous post was at 19:18 ----------
А что AGD позволяет написать любую игру?
На самом деле, написать(достойного) многое можно..
Вы будете в них играть ?
Без сомнения, играть будут многие..
Шансов написать что-нибудь стоещее мало.
Заблуждение.
Всё зависит на сколько фантазия позволяет.. и время..
На ассемблере теперь уже никто не пишет ?
Или ленятся..)
---------- Post added at 19:33 ---------- Previous post was at 19:30 ----------
Что нужно для написания игр ?
Желание и время..)
Нашел на WOS игру ТАНЧИКИ 2013 года -- http://www.worldofspectrum.org/infoseekid.cgi?id=0028161
Нашел на WOS игру ТАНЧИКИ 2013 года
а её автор тут и презентовал на форуме
`Игрушка Tank Battle была написана в 1995 году.`
null_device
22.07.2013, 19:26
zst, и? Тема с этой игрой (http://zx-pk.ru/showthread.php?p=589316#post589316) была на форуме. ;)
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
Я так понял, что вы тоже поддерживаете мою идею и сами пишете программы?
Да, поддерживаю. Но сомневаюсь теперь, что это реально создать. Нужна куча времени и остановка всех остальных своих проектов. Т.к. это целая работа.
Пишу сейчас только игры. На данный момент уже полгода бездельничаю. :)
Да, поддерживаю. Но сомневаюсь теперь, что это реально создать. Нужна куча времени и остановка всех остальных своих проектов. Т.к. это целая работа.
Пишу сейчас только игры. На данный момент уже полгода бездельничаю. :)
На мой вгляд, на это особо времени тратить не придется. Авторов будет человека два - 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 для запуска примера
Проект движка для игры "FUTURE TANK".
Уточнение:
7. Как только FT пытается выехать за пределы этого воображаемого квадрата начинается скроллинг экрана. Так как сдвигать за один кадр весь экран невозможно – сдвигать будем часть. Это будет квадрат размером 11 х 11 клеток вокруг FT.
Проект движка для игры "FUTURE TANK".
а контроль танка/башни раздельный ?
а контроль танка/башни раздельный ?
Передвижение танка:
A - влево
D - вправо
S - вниз
W - вверх
Стрельба:
6 - влево
7 - вправо
8 - вниз
9 - вверх
0 - вперед
Обещанная 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)
Все прекрасно заработало. Теперь любой желающий может приобщиться к написанию игр на ассемблере:
Наброски спрайтов движущихся объектов
http://s019.radikal.ru/i626/1307/e5/323ff959ee02t.jpg (http://s019.radikal.ru/i626/1307/e5/323ff959ee02.png)
Добавил кнопку 0 - стрельба вперед.
Танки трех типоразмеров в движении.
http://i054.radikal.ru/1307/a8/fa1f8800584dt.jpg (http://i054.radikal.ru/1307/a8/fa1f8800584d.png)
Обещанная 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 нифига не разобрать:)
У меня на виртуалке driver=blt не завелся. А video=double... Ну зажрался я, на моем мониторе double нифига не разобрать:)
режим blt плавный, как и 8ой спектакулятор. Не у всех же виртуалка :)
Спрайты для начала есть. Теперь нужно придумать. как их лучше хранить и выводить. Скорее всего при движении по-горизонтали и вертикали будут разные процедуры. При движении по-горизонтали возможна ситуация, когда танк выезжает из-за границы экрана. То есть нужно изображать не весь спрайт, а 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
Хранение спрайтов в памяти. Описание для библиотеки. Удобный способ подсказал alone (http://www.zx.pk.ru/showpost.php?p=611409&postcount=82).
Идея такая. 256 байтов в области спрайтов выделяются для хранения первых строк нескольких спрайтов. Следующие 256 байтов выделяются для хранения вторых строк нескольких спрайтов и т.д. на всю высоту спрайта.
При этом байты в столбике одного спрайта располагаются с шагом 256 байтов. Для перехода к следующему байту в столбике (по-вертикали) достаточно будет увеличить старший байт адреса в области спрайтов.
Для перехода к следующему байту спрайта по-горизонтали достаточно увеличить младший байт адреса о области спрайтов.
Таким образом, данный способ хранения спрайтов подходит для вывода спрайта как строками, так и столбцами.
Адрес начала нужного спрайта можно определить, прибавив к адресу начала области спрайтов номер спрайта (от 0 до максимально влезшего) столько раз, сколько байтов в строке каждого спрайта. Это подходит для случая, когда все спрайты одинакового размера. Также можно составить таблицу для определения по номеру спрайта его адреса.
zst, не самый удобный способ кстати
по скорости не самый быстрый и ограничение на высоту спрайта
zst, не самый удобный способ кстати
по скорости не самый быстрый и ограничение на высоту спрайта
А какие еще бывают удобные и быстрые способы хранения спрайтов ? Про ограничение в высоту - не вижу ограничений. Объясните, в чем ограничение?
У меня будут полуспрайты высотой 8 точек. 8 удобно тем, что спрайты можно нарисовать прямо на экране. И верхний сегмент картинки (2Кб) можно скопировать без преобразований в область спрайтов. Для других высот спрайтов картинку придется преобразовывать. Но это не ограничение при хранении спрайтов.
На мой взгляд, недостатков у такого способа хранения нет.
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
Ещё про зеркалирование не забываем :) А вообще я не понял, выводим спрайт по координатам кратным 8 ? Мне думается танчики ездить должны попиксельно.
drbars, декрунчим спрайты до точки либо до 2х и спокойно выводим до знакоместа :)
Спасибо огромное. Добавил на сайт www.z80a.ru
Автор совсем не ведает о существовании zxpress.ru?
Там сорцов поболее чем на zxdn, не говоря уже про учебники.
Автор совсем не ведает о существовании zxpress.ru?
Там сорцов поболее чем на zxdn, не говоря уже про учебники.
Тема создания базы процедур для игры уже переросла в открытое обсуждение написания игры :) Сорцов навалом, главное поискать :) Всё уже придумано до нас! (с)
zst, хорошо считаем
1. сколько графики будет использовано в игре - допустим не более 16 кб
итого отдаем под графику последнюю страницу
64*256
итого максимальная высота спрайта 64 точки
при этом на ковре останется какое то количество свободного места которое никак не заполнить вот как вот здесь...и использовать его не очень удобно.
2 при выводе графики нельзя использовать стек и не очень удобно использовать спрайты с маской ...
...
зато удобно делать урезание по краю экрана
вывод же спрайтов с маской змейкой через стек самый быстрый по скорости
pop de
ld a,(hl)
and e
or d
ld (hl),a
Да, место не очень рационально используется. Я поэтому и хотел использовать данный способ хранения чтобы можно было легко выводить 1-2 столбика из трех в спрайте. Но лучше я переделаю вывод змейкой через стек. Это ускорит вывод всех спрайтов, которые влезают на экран полностью. Только от экономии памяти с помощью полуспрайтов придется отказаться. И потребуется перекодировать спрайты в нужный формат.
Ещё про зеркалирование не забываем :) А вообще я не понял, выводим спрайт по координатам кратным 8 ? Мне думается танчики ездить должны попиксельно.
Спрайты будут двигаться попиксельно. На каждое направление по 8 спрайтов для попиксельного движения.
Спрайты нарисовал в GALE (пока для движения влево и вправо), сохранил в BMP, преобразовал в SCR. А дальше как их добавить в проект игры - чтобы я их мог загрузить на экран как обычную картинку ? На рисунке условно паказаны клетки (границы знакомест).
Автор совсем не ведает о существовании zxpress.ru?
Там сорцов поболее чем на zxdn, не говоря уже про учебники.
Я добавил эту ссылку. Но там сорцы сырые, а я планирую собирать готовые для загрузки в SjASMPlus и с комментариями. Каждая подпрограмма должна быть с образцом запуска.
---------- Post added at 20:39 ---------- Previous post was at 20:38 ----------
Тема создания базы процедур для игры уже переросла в открытое обсуждение написания игры :) Сорцов навалом, главное поискать :) Всё уже придумано до нас! (с)
Вы мне придайте начальное ускорение, а дальше я сам буду рулить и крутить педали.
Спрайты будут двигаться попиксельно. На каждое направление по 8 спрайтов для попиксельного движения.
Спрайты нарисовал в GALE (пока для движения влево и вправо), сохранил в BMP, преобразовал в SCR. А дальше как их добавить в проект игры - чтобы я их мог загрузить на экран как обычную картинку ? На рисунке условно паказаны клетки (границы знакомест).
Думается мне, что нужно воспользоваться спрайтовой утилитой (http://zx.pk.ru/showthread.php?t=17811).
Думается мне, что нужно воспользоваться спрайтовой утилитой (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-картинку. С инструкцией.
Спрайты будут двигаться попиксельно. На каждое направление по 8 спрайтов для попиксельного движения.
Спрайты нарисовал в GALE (пока для движения влево и вправо), сохранил в BMP, преобразовал в SCR. А дальше как их добавить в проект игры - чтобы я их мог загрузить на экран как обычную картинку ? На рисунке условно паказаны клетки (границы знакомест).
1.все спрайты сложить в виде одного высокого столбика
2.перевести в чернобелый TGA
3.загрузить спрайты с отрезанием заголовка
incbin "sprites.tga",36
для sjasm самое, то
либо воспользоваться моей утилитой picture2bin
Мой грабер "змейкой" сохранять не умеет.
Тебе надобно поставить какой-то командер (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
Можно ссылку ?
Научился добавлять файл картинки в память. Теперь надо спрайты с картинки преобразовать в требуемый формат.
Можно ссылку ?
https://www.dropbox.com/s/49r325ve0yuay1i/cutter.exe
пробуй, будут вопросы/глюки пиши
jerri, в каком формате кушает твоя прога файлы? в PNG (судя по краткой справке)?
Что значит /mixed в режиме /masked?
Один файл - один спрайт? или как-то указывается размер спрайта и файл разбивается на нужное число спрайтов?
Тут со спрайтами есть интересный момент: танчики будут двигаться с постоянной скоростью или могут ускоряться?
Я добавил эту ссылку. Но там сорцы сырые, а я планирую собирать готовые для загрузки в SjASMPlus и с комментариями.
Ну ведь никто тебе не мешает их привести в соответсвующий вид? :)
jerri, в каком формате кушает твоя прога файлы? в PNG (судя по краткой справке)?
Что значит /mixed в режиме /masked?
Один файл - один спрайт? или как-то указывается размер спрайта и файл разбивается на нужное число спрайтов?
одна картинка один спрайт или несколько спрайтов одной ширины друг над другом
слева спрайт справа маска
миксед - байт маски + байт спрайта + байт маски + байт спрайта
одна картинка один спрайт
Т.е. если дать на вход картинку размером 16*24, то получим один спрайт 16*24?
или несколько спрайтов одной ширины друг над другом
А размер как задать, чтоб правильно порезало?
размер должен быть задан кратно 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 ----------
По глюкам опять же сообщайте, утилита написана без тестирования :)
размер должен быть задан кратно 8 для спрайта без маски и 16 для спрайта с маской
Все равно не понял, как мне из файла, к примеру с размерами 32*32, получить 4 спрайта размерами 16*16? Опиши, плиз подробнее.
Дмитрий, никак :) ты берешь файл размером 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)
jerri, понял, думал, что можно распилить на несколько спрайтов одну картинку.
Первые движения танка. Вырезал спрайты прямо из картинки. Вывожу змейкой с помощью указателя стека. Дальше буду приводить функцию печати спрайта в более правильный вид с учетом атрибутов. Потом буду делать управление от клавиатуры.
Первые движения танка.
Для начала неплохо, я уже 3 раза движок своей игры переписал... оптимизация страшная сила :)
Первые движения танка. Вырезал спрайты прямо из картинки. Вывожу змейкой с помощью указателя стека. Дальше буду приводить функцию печати спрайта в более правильный вид с учетом атрибутов. Потом буду делать управление от клавиатуры.
У тебя все действие будет происходить на одном экране? если да то тебе урезание спрайтов не нужно
У тебя все действие будет происходить на одном экране? если да то тебе урезание спрайтов не нужно
Скорее всего будут некоторые уровни с большой картой. Для вывода части спрайта я прикинул, что один столбик спрайта можно будет вывести на экран с помощью индексной адресации. В IX или IY записать адрес начала спрайта. А командами LD A,(IX+N) загружать из спрайта нужные байты. Т.е. для неполных спрайтов будет отдельная подпрограмма, более медленная. Еще нужно написать отдельную подпрограмму для вывода спрайта при движении по-вертикали. Там в любом месте может встретиться граница клетки, а ее правильный переход при выводе спрайта занимает очень много времени...
А где бы почитать про способы описания объектов на карте ?
А как вам скорость движения танка? На мой взгляд очень быстро - надо уменьшить раза в 2-4, особенно для мощных танков.
Как правильно делить проект на несколько файлов, в которые можно было бы вынести громоздкие подпрограммы ?
Alex Rider
01.08.2013, 20:06
Как правильно делить проект на несколько файлов, в которые можно было бы вынести громоздкие подпрограммы ?
Если они компилироваться в один блок кода, то просто пишешь новый код в новом файле .a80, а в главном файле включаешь новый в нужное место директивой INCLUDE "Имя файла.a80". Чтобы в большом проекте не пересекались имена (да и для чтения удобнее), новый файл обрамляешь директивами MODULE имя модуля / ENDMODULE. Тогда во внешних файлах по отношению к этому символы из него используются в виде имя модуля.имя символа.
Если они компилироваться в один блок кода, то просто пишешь новый код в новом файле .a80, а в главном файле включаешь новый в нужное место директивой INCLUDE "Имя файла.a80". Чтобы в большом проекте не пересекались имена (да и для чтения удобнее), новый файл обрамляешь директивами MODULE имя модуля / ENDMODULE. Тогда во внешних файлах по отношению к этому символы из него используются в виде имя модуля.имя символа.
А почему расширение файлов a80, а не z80 ?
А почему расширение файлов 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)
Скорее всего будут некоторые уровни с большой картой. Для вывода части спрайта я прикинул, что один столбик спрайта можно будет вывести на экран с помощью индексной адресации. В 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 "имя файла"
тогда при компиляции файл "имя файла" будет подгружен
Кстати я не совсем понял, зачем танчики выводить двумя процедурами. Я бы сделал одной процедурой по координатам (x,y). Так намного проще. Стек можно использовать для экранной таблицы. Зачем использовать стек где размер спрайта кратен 3 ? Скорость вывода спрайта нужно считать по самой медленной процедуре. Нет смысла сделать движение по X быстрее, чем по Y.
поскольку рисуем змейкой то всегда выбираем по 2 байта - я гарантирую это :)
предъяви процедуру рисования спрайта с использованием экранной таблицы
pop hl
add hl,bc
ld a,(de)
ld (hl),a
конечно красиво но где тогда высоту спрайта хранить?
поскольку рисуем змейкой то всегда выбираем по 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 такта на итерацию с коррецией, зато без таблиц.
; Быстро и сердито :)
Вот, набросал пример. Вывод способом 2.
O/P/Q/A - движение танка :)
Задание топикстартеру: прикрутить сюда спрайты для вертикального движения :)
ммм ну да если спрайт без маски тогда да :)
что будет если два танка столкнутся?
ммм ну да если спрайт без маски тогда да :)
что будет если два танка столкнутся?
Думаю, видеоэффекты :) Но суть примера не в этом, а в том чтобы показать как и в каком примерно направлении нужно писать данную игру.
Всё, что кажется простым на самом деле не так. Вывод по (OR) тоже можно реализовать. Я думаю нужно для начала определиться, что у нас будет на экране. Как будет выглядеть лабиринт, сколько одновременно может быть в нём танков в игровой области. Далее, как делать скролл? Тут с координатной плоскостью надо задуряться... Можно держать, глобальные координаты каждого танка на карте уровня... а видимое игровое окно будет проекцией области этой глобальной карты. И скролл будет делаться относительно координат игрока в игровом окне. Координаты проекции поменялись - все танки автоматом перерисовались. Как препятствия (стены) лабиринта описывать... два способа координатами прямоугольников или атрибутной картой.
Далее, ИИ игры должен как-то управлять этими объектами (танками врагов) через определённые методы. Тут и кратчайший поиск по лабиринту, и алгоритмы преследования.
Добавил управление танками по координатам, обрезку на краях окна и закрашивание атрибутами.
Дальше надо будет сделать тоже самое для движения по-вертикали.
http://s017.radikal.ru/i418/1308/77/5eac308d1d21t.jpg (http://s017.radikal.ru/i418/1308/77/5eac308d1d21.png)
:v2_dizzy_facepalm:
А что ? Танки мчатся - что еще надо ? Теперь можно думать, как с помощью них сценарий реализовать.
А что ? Танки мчатся - что еще надо ? Теперь можно думать, как с помощью них сценарий реализовать.
Выше несколькими постами я добавил пример с исходником. Посмотри.
В нём уже управление есть. Только вывод надо переделать с LDI на ОR, иначе не получится расталкивать танки корпусом... будет затираться столбец одного из танков.
---
Посмотрел сорцы, отсечение по границе экрана вообще не так делается. Да и оно не нужно, т.к. я понял будет скролинг.
Выше несколькими постами я добавил пример с исходником. Посмотри.
В нём уже управление есть. Только вывод надо переделать с LDI на ОR, иначе не получится расталкивать танки корпусом... будет затираться столбец одного из танков.
Програмка короткая. Значит рисовать будет медленно. Атрибуты для полного спрайта у меня также рисуются. Управление посмотрю. Спасибо.
---
Посмотрел сорцы, отсечение по границе экрана вообще не так делается. Да и оно не нужно, т.к. я понял будет скролинг.
Скроллинг будет для фона и танков. При этом цвета будут серыми. Но возможна ситуация, когда танк сам заезжает в окно. Для этого и нужна обрезка. А целые спрайты выводятся максмиально быстро с использованием указателя стека. Я сделал обрезку с помощью индексной адресации, так как в данном случае через стек преимуществ почти нет. Зато одна универсальная процедура для разных (четырех) вариантов обрезки по-горизонтали.
:v2_dizzy_facepalm:
:v2_dizzy_facepalm::v2_dizzy_facepalm:
з - смещение в знакоместах (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) действие происходит на заводе-автомате, который был перепрограммирован на производство древней техники - автоматических танков.
Как показал 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 тактов на строку. При этом можно рисовать в любую область экрана. И использовать для вертикального движения спрайта.
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 перескакивает...
На мой взгляд ваша процедура подходит для движения по-вертикали. А для движения по-горизонтали использовать стек.
Небольшое уточнение. Если копировать "змейкой", то по второму способу будет так:
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 все пересчитывает, экран сдвигается. Все танки перерисовываются.
Как-то так. Но это без логики ещё.
концепт неверный
если использовать ковер то копировать можно так
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
а тут да есть ошибка
Нет там ошибки.. Чтобы я пожертвовал 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 таков не используя стек :)
Процедура универсальная, из моего проекта.. там это актуально, когда спрайт попадает в эту область.
В этом проекте можно опустить такую коррекцию.
Эта конструкция не будет работать. 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 такта.
Но вашу подпрограмму можно немного изменить, как посоветовал 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 нельзя использовать.
Добавил движение вверх/вниз. Вывод танка по OR.
drbars, Вот так правильнее
Надо клешинг именьшать :)
drbars, Вот так правильнее
Надо клешинг именьшать :)
Круто! Приделал звук :v2_walkm:
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
Добавил обработчик клавиатуры с переопределением клавиш :v2_dizzy_keyboard:
графику надо поправить
правильный размер танка - 3*3 3*4
графику надо поправить
правильный размер танка - 3*3 3*4
Да там надо всё иначе делать вообще. Процедурка вывода танка должна уметь за край экрана рисовать, т.к. во время игрового процесса оттуда может выехать танк врага. А за (X,Y) координаты спрайта нужно взять правый нижний угол этого спрайта.
Если делать как я предложил, глобальными координатами и окном игровой проекции. Кстати динамично должно получится... Препятствия в лабиринте сделать можно тайлами 16х16px. Анализируем игровую проекцию и если было смещение быстро стеком рисуем сначала тайлы, потом танки... скролл проще по 16px сделать.
Тайлы которые рисуются в ирговой проекции стоят атрибутную карту, по ней проверяем препятствия.
В идеале, сырой движок должен выглядеть так: тестовая локация обрамлённая тайлами по периметру. Внутри хаотично катают танки... и мы перемещаемся среди них, игровое окно двигается (можно разными способами сделать).
Думаю есть шанс за фрейм уложиться даже со скроллом.
drbars, элементы 24х24 иначе танк некрасивый будет
О, вы уже скоро без меня игру сделаете ! Я пока иду мелкими. но верными шагами.
Переписал функцию печати спрайтов. Теперь с помощью команд LDI. Это позволит использовать процедуру для печати целых спрайтов по-горизонтали , а также для печати целых и обрезанных спрайтов по-вертикали. Получилось почти как у drbars.
Попробовал движение вправо. Наверно надо передвинуть спрайты на одну клетку вправо, чтобы не оставался след около правого края экрана.
Andrew771
06.08.2013, 11:11
А нафига в такой игре заморачиваться быстрым выводом спрайта? У тебя что, стратегия в реальном времени? Есть же более простая процедура, причем учитывающая и цвет, и маски, и выход за пределы экрана в книге "Как написать игру на Ассемблере". Ее чуть соптимизировать, раскрыть циклы, и всё.
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
в Танчиках простая процедура вывода подойдет
в Танчиках простая процедура вывода подойдет
насколько простая?
взять байт положить байт?
а если пуля будет рисоваться? а если взрыв? должен ли он накладываться поверх спрайтов танков?
будут ли обьекты заслоняющие поле? будет ли танк рисоваться под такими обьектами?
будут ли реализованы маскировочные сети? как они будут наложены на танки и взрывы?
какой размер будет иметь карта?
Andrew771
06.08.2013, 16:27
Для этого есть в той процедуре маски, а также принципы их наложения по AND, OR, XOR.
Andrew771, я умею маскировать спрайты :)
а сейчас я спросил что значит простая процедура вывода?
Andrew771
06.08.2013, 16:43
Andrew771, я умею маскировать спрайты
а сейчас я спросил что значит простая процедура вывода?
zst захотел наворотить кучу процедур для разных положений танков, а вы ему подсказываете всякие навороты. А зачем, если можно обойтись одной универсальной процедурой, которая в книге.
Andrew771, универсальная процедура тем и отличается что подходит для общих случаев т.е когда надо просто бросить кусок картинки и скорость при этом не важна.
но вот если надо это сделать быстро и качественно приходится уже думать.
посмотри старые игры тот же диззи, те же игры от opera soft. эти товарищи вообще никогда не меняли процедуры спрайтовые написанные хзкогда.
и сравни их с firefly, или тем же untouchables.
давай посчитаем
автор хочет 6 танков,
танки будут стрелять значит еще 6 выстрелов
еще герой и его выстрел или даже 3
итого уже 6+6+1+3 16 объектов на экране.
а теперь давай их еще в 50 фпс рисовать.
быстрее надо :)
Andrew771
06.08.2013, 16:58
ну делай, как хошь. Я бы не стал заморачиваться, если хватает скорости. 16 спрайтов - не так-то и много.
Andrew771, давай посмотрим
удаление спрайтов
рисование спрайтов
логика обьектов
звуки
а так да :) немного
Тут маски еще не хватает, я так понимаю поле будет же не пустым, а танк будет елозить по траве/грунту/трясине, а оно тоже фон имеет...
Andrew771, человек же делает спрайты героя и врагов не 8*8, а 16*16 минимум, если добавится маска, то постоянная ротация данных спрайта/маски перед выводом и так 16 объектов подряд, а так же восстановление фона под спрайтом - уже во фрейм не вместится, да и мерцать будет убого. Надо изначально движок делать дельный, а не потом искать пути оптимизации скорости, когда уже будет сложно все переделывать. Я вон тоже сначала думал для экономии памяти в 128м спеке юзать универсальную п/п вывода спрайта, с постоянной ротацией, хоть она и развернута, но все же жрет не мало тактов. Поэтому оценив память и быстродействие, все же остановился на методе хранения сдвинутых спрайтов в памяти и быстрого вывода их на экран.
А мне даже интересно увидеть что получится :) Возможно, всё в итоге будет совсем иначе, чем в начале... у меня похожая ситуация поначалу была. Сначала сделал, заработало. Потом занимался оптимизацией, идеи приходят бывает не сразу. Зато добился приличных скоростей и гармоничного соотношения скорость/память. Потом через полгода посмотрел на код... WTF?:eek:
возможно что-то пригодится из исходников Мастера ftp://ftp.worldofspectrum.org/pub/sinclair/games-extras/SaucerV1.17_SourceCode.zip
goodboy, если только звуки :)
насколько простая?
взять байт положить байт?
а если пуля будет рисоваться? а если взрыв? должен ли он накладываться поверх спрайтов танков?
будут ли обьекты заслоняющие поле? будет ли танк рисоваться под такими обьектами?
будут ли реализованы маскировочные сети? как они будут наложены на танки и взрывы?
какой размер будет иметь карта?
Скорее всего, из-за ограничений встроенной видеокатры ZX SPECTRUM, придется отказаться от объектов над и под танком (сетки, вода и т.п). Чтобы не было клешинга атрибутов танки будут ездить по черному фону каждый в своем периметре (в квадрате 3х3 клетки). Спрайты придется сделать такого же размера. Размеры танков до 16х16 точек. Одна пустая клетка в спрайте при приближении танка вплотную к периметру будет затирать след от танка сзади. Периметр сдвигается сразу на одну клетку. Внутри периметра перемещение на 1 точку. Между собой танки или лабиринт игрового поля не должны пересекаться, то есть каждый танк внутри своего периметра 3х3 клетки. Они даже могут подъехать вплотную друг к другу, насколько позволяют периметры. Тогда все будет нормально с цветами без клэшинга атрибутов. Фон планируется из спрайтов размером с клетку (8х8). На карте уровня каждому спрайту будет соответствовать одно или двухбайтный номер.
Пока отлажен выезд танков влево и вправо за границы окна. Также структурированы процедуры печати спрайта и расчета слудующего положения. Для оценки времени на изображение четырех танков закрасил BORDER синим цветом.
На первом уровне FUTURE TANK планируется как обычный вражеский танк мелкгого размера, но желтого цвета. Он был сделан из обычного танка путем захвата и перепрограммирования. Далее, по мере изучения вражеских технологий и собственных разработок, возможен апгрейд трофейного танка...
А нафига в такой игре заморачиваться быстрым выводом спрайта? У тебя что, стратегия в реальном времени? Есть же более простая процедура, причем учитывающая и цвет, и маски, и выход за пределы экрана в книге "Как написать игру на Ассемблере". Ее чуть соптимизировать, раскрыть циклы, и всё.
Как оказалось, любая процура на Z80 занимает очень много времени. Поэтому необходим запас за счет быстрых процедур вывода спрайтов.
introspec
08.08.2013, 17:07
Как оказалось, любая процедура на Z80 занимает очень много времени
(!!!)
Скорее всего, из-за ограничений встроенной видеокатры 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 объектов можно свободно вместить во фрейм.
С развернутыми спрайтами можно и фон сделать - скорость упадет незначительно, а красота и играбельность в разы увеличится!
Игра станет черно-белой и медленной. К сожалению, тут ничего поделать нельзя. Или цвет или мелкий фон под гусеницами.
К сожалению
Не видел цвета в 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, Черный Ворон, но не скажу, что это огромный минус этих игр...
С хорошо прорисованными спрайтами - это вряд ли минус.
Не видел цвета в UFO1-2, Черный Ворон, но не скажу, что это огромный минус этих игр...
Я планирую более простую игру.
сколько объектов планируется одновременно выводить на экран? 8-10 мало?
Прикинул время отображения спрайтов от INT до начала экрана. Судя по синему цвету на BORDERe, без мерцания можно отобразить до 9 танков. Это без сохранения и масок с фона.
При обрезке время отображения увеличивается. Еще нужно снаряды изображать. Так что при существующем движке можно отобразить на экране не более 7 движущихся танков.
zst, предлагаю другой вариант
1 сортируем танки по координате Y
2 стираем танки по старой таблице
3 рисуем по новой
даже если у тебя процедура выйдет за пределы бордюра - не факт что это затронет танк
zst, предлагаю другой вариант
1 сортируем танки по координате Y
2 стираем танки по старой таблице
3 рисуем по новой
даже если у тебя процедура выйдет за пределы бордюра - не факт что это затронет танк
Спасибо, это может сработать. А то я уж подумал, что на ZX без мерцаний не обойтись. Я хочу сделать проще, без масок и стираний. Спрайты так сделаны, что следов при движении не остается.
...А насколько проще было бы писать программы, если бы INT начинался после экрана. Ну и правильная адресация экранной области (без перескоков на границах рядов и сегментов) позволила бы копировать столбики спрайтов командой LDIR...
zst, это тебе Вектор 6Ц нужен :)
кстати говоря
в С загрузить 255
в В загрузить смещение по Х
pop de
ld a,b
add a,e
ld e,a
ldi
ldi
ldi
в данном концепте уже будет удобнее
ну и ессно раскатать ее на 16 строк и выходить на нужную при выводе
и добавить еще 2 для урезания.
Слежу внимательно за данной веткой и хотя многого не понимаю всё равно очень интересно за процессом наблюдать да и результат конечный посмотреть. :)
Слежу внимательно за данной веткой и хотя многого не понимаю всё равно очень интересно за процессом наблюдать да и результат конечный посмотреть. :)
Да я только с помощью форума разрабатываю игру. Можно сказать online. Шедевры то делают молча, не показывая промежуточные результаты.
Начал проектировать 1 уровень. Показаны вражеские танки зеленого цвета, но сначала уровня их не видно, пока не повернуть за угол. Такая будет игровая обстановка. Цель 1 уровня - найти заправку (условно показана желтым цветом) и зарядиться.
Да я только с помощью форума разрабатываю игру. Можно сказать online. Шедевры то делают молча, не показывая промежуточные результаты.
Ну это ты зря так думаешь) Мне некоторые участники конкурса показывают промежуточные результаты)
Начал проектировать 1 уровень. Показаны вражеские танки зеленого цвета, но сначала уровня их не видно, пока не повернуть за угол. Такая будет игровая обстановка.
Гуд! Мне нравится очень)
zst, зачем такой обьем экрана отдаешь под мусор?
сделай полноэкранную
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot