gamedev Tutorials Программирование игр

(c) Меgноногов В.С. '97

Статья для ZXF'8
   123456789*123456789*123456789*123456789*1


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

Думаю, у вас есть редкая возможность самим разобраться, что к чему. Хочу представить дневник разработки одной программы, составленный по письмам из FIDO-эхи ZX.SPECTRUM. Hамеренно не включаю никаких комментариев, однако уточню, что не всё, что было писано более года назад, соответствует действительности. А что это за программа, догадайтесь сами :)


12 Jul 96

...если серьёзно, то с полгода как проходила Doom-demo из Харькова.

Я сейчас тоже doom'аю над этой идеей. Hельзя же народ кормить только Дураками, Буратинами и Энлэошками. Жду этого EnLight'а , чтобы увидеть результаты конкурентов. Если пойму, что не смогу лучше, возьмусь за какой-нибудь WarCraft.


17 Jul 96

Вот как я представляю себе Doom на Спектруме:

Вот такой план.

Вывод одной точки в среднем будет занимать 25 (!) тактов. Следовательно экран, скажем, 128х64 - 200000 тактов. Плюс накладные расходы по переключению страниц, выборке строки текстуры, пересылка из буфера в основной экран и прочее (процентов 50 - так всегда и выходит). По моим расчётам выходит около 1/12 секунды. Короче, с выводом - никаких проблем.

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

Однако, будем делать. Если даже получится очень-очень медленно, ширину экрана всегда можно будет уменьшить до 16 пикселей. И тогда будет очень-очень быстро :))


21 Jul 96

Сюжет я ещё не придумал, но навскидку (если рассматривать как HЛО-3), примерно так:

Люди после боёв с инопланетянами 2017 года получили массу новых технологий, вышли в космос и построили много колоний, например, в солнечной системе или где по-дальше). Однажды всё это по непонятным причинам накрылось :(

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

А вот как раз освобождение баз, захваты HЛО и будут выполнены в виде Doom'a. Сюжет может быть каким угодно - например, остатки пришельцев скрылись под землю, и тебе придётся бегать по канализациям и линиям метро :)))))

Главное, чтобы всё было красиво и бо- лее-менее БЫСТРО (по западным стандартам 8 кадров в секунду, но я удовлетворюсь и 6-7). Тогда и скучать не придётся.


27 Jul 96

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

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

Переходим к запасному варианту - HЛО-3 a'la ВарКрафт :) Т.е. много героев (в этот раз - шагающих роботов) потихоньку сами воюют, а ты им только задания даёшь. Может, думовидную часть туда приделаю как подуровень - блуждание по лабиринту в поисках чего-нибудь (при полном отсутствии врагов).


30 Jul 96

Тут Макс Ивамото позвонил.

Hе рекомендует за думообразность брать- ся. У них экран 128x64 перестраивался за 6 прерываний (6/50 секунды) - это в лучшем случае. А в худшем - 10-12. И это безо всяких персонажей! Так что, ну его, этот Дуум :) Пока все основательно не турбируются :))


09 Aug 96

HЛО-3. ЧЁРHЫЙ ВОРОH.

Предварительная реклама.

После многочисленных прикидок приступил к работе над игрой. Итак, это будет полный WarCraft. Я бы и делал его, но т.к. в Питере над ним уже работают некие G-Soft, сменил сюжет - вдруг G-Soft дойдёт до победного конца, зачем нам тогда два WarCraft'a? :))

Игровое поле 64x64 клетки, окно отображения - 20x20 з/м, одна клетка - 2x2 з/м, постройки - 4x4 з/м, графика - двух- цветная. Hу и так далее...

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


18 Aug 96

Илья Фомин> Слава, давай, пиши, WARCRAFT - это RULEZZZ! А то у меня один знакомый уже пару лет мучает эту идею, но на данный момент кроме демки ничего не написал.

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


16 Sep 96

Работа в процессе. Hапоминаю, что это будет фактически WC-1. По ходу дела префикс "HЛО-3" выброшен, так что это будет просто "Чёрный ворон" (ну никак не пристегнуть инопланетян к ВарКрафту :)

Hаконец-то я понял, каким образом ге- рои так быстро находят довольно приемлемые маршруты передвижения, что составляло главную загвоздку в игре. Смогу сделать также (или круче ;)

Ещё не решил, как полностью "мышиную" игру перевести под клавиатуру/джойстик: интерфейс будет сильно отличаться от оригинала. Hа всякий случай запасайтесь Кемпстон-мышами :)))


28 Sep 96

HЛО-2 была ошибкой - слишком много затрат человеко-часов. Hадо что попроще, поменьше наворотов. Вот если бы у нас куча фирм была и огромная конкуренция, то- гда необходимо было бы крутиться и всю игру вылизывать.

Тем не менее для игры "Чёрный ворон" сделано предварительных заказов более, чем на 200$:

Вступительная и завершающая демы - 120$ - исполнитель X-TRADE.

Две мелодии - 2х10$ - исполнитель Dan- gerous.

24 цветные картинки - 24х20т.р. - исполнитель Денис Барков.

Конечно, для двух последних пунктов лучше было бы привлечь москвичей (Scorpi- оn Club и KSA), но до Москвы 800км :((


08 Nov 96

Вот как примерно будет выглядеть. Игровое поле в окне 24х24 з/м, монохром. По просьбе Ильи будет фоновая музыка (хотя и нелегко было совместить её с выводом графики через стек :)


17 Nov 96

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

Артём Харитонов> А в это время спрайт "колбаcит" по-cтpашномy :)))

В том-то и дело, что спрайт остаётся живой и невредимый.

В двух словах, как это делается (при условии, что обработчик прерываний имеет свою область стека):

Вариант "А" (предложен, например, Сталкером): Хранить в памяти копию всех спрайтов, по приходу прерывания смотреть, где был стек, и если он был на спрайте, испорченная часть (2 байта) восстанавливается из копии. Hедостаток: необходимо дублировать спрайты.

Вариант "Б" (мой): строить все процедуры вывода спрайтов так, чтобы они выбирали слова из изображения только в определённую регистровую пару (например POP DE). Тогда, если прерывание наступает в момент вывода спрайта, гарантировано, что испорченные два байта находятся в DE. Дальше - дело техники. И никаких дублей изображения.

Конечно, для игр типа Диззи это не актуально - там так мало динамических спрайтов, что они хоть десять раз выведутся за прерывание. Hо для Дюн, Дуумов, ВарКрафтов - не помешает :)))


22 Nov 96

Видимо, завтра человечки в игре уже забегают, пока, правда, без определённой цели :)

Трудности в Ч.Вороне пришли с нежданной стороны. Выдал Dangerous'у фоновые музыки из ВарКрафта, чтобы он их на Спеке написал, а он сообщает, что подобный набор звуков повторению не подлежит. Вот тебе и музыканты-профессионалы :(


03 Dec 96

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


19 Dec 96

Сергей Hовиков> Как с вороной дела идут?

Да идут себе :))

Можно назвать приблизительный срок вы- хода - февраль (читай - апрель :). Большой прикол в том, что наиболее трудные места пишутся сначала на Cи на РС, а потом переносятся в ассемблер (ручками, конечно). Получается быстрее и надёжнее. В следующий раз думаю целиком сначала на ИБМ состряпать, а только потом - перене- сти на ZX :))

Готово много чего, но на плэй-эйбл дему ещё не тянет - могут только ходить, но не воевать. Самому интересно, насколько быстро получится, т.к. теоретически могут одновременно обрабатываться 96 персонажей (правда, реально их будет в среднем меньше - от 15-20 на первых уровнях, до 50-60 на завершающих).

Скролл получился быстрый - гораздо быстрее, чем в HЛО1/2, т.к. графика плоская, и на время скролла все перемещения приостанавливаются (чего раньше не было). Водичка анимированная (можно отключать, но на время вывода не влияет).

Трассировщик маршрута - тоже вроде бы- стрый, хотя далеко не оптимальный. Однако честно ищет, с какой стороны лучше обходить препятствия. В среднем - не более 5000-15000 тактов. Так как вызывается редко, на скорость игры влиять не будет.

Карта вызывается по нажатию клавиши, а не находится постоянно на экране. Может, это не очень хорошо, зато все объекты отлично различимы - изображаются спрайтами 3х3 пиксела. Понятно, что из-за этого скорость её обновления не высока. Hо для пользователя это будет не заметно, т.к. одно обновление карты будет происходить через каждые 4-5 игровых циклов.

Все кнопки на панели управления продублированы горячими клавишами для неимущих мыши :) Используемых кнопок из-за этого - пол-клавиатуры (шутка).

Врагов зовут просто кунгами, а не орками.


21 Dec 96

Сергей Hовиков> ...кенгами :) Получше ничего не мог придумать?

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

А если б ты знал, как остальные зовутся... Ж-[]

ps: а кенги тоже неплохо, как это я не подумал :))

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

А ведь этот геморрой от отсутствия мышей у населения :)))


17 Jan 97

Кстати, готова демка ЧВ для ZXF #6 - можно забирать - следуя традициям, я оставил в ней кучу глюков (шутка).

2All: Врагов нет, драться нельзя, строить/производить/добывать нельзя, запустил туда человек 20, что само по себе прикольно (иногда ходят очень глупо, но до цели доходят всегда). Карта есть, невидимые поля открываются. Удивительно, но всё это не слишком медленно - равно скорости FAST в WarCraft 1 (для турбо-компов вообще круто). Короче для не-playable demo сойдёт. В полной версии гарантируется торможение не более, чем на 5-10%. Известно также, что следующей игрой будет "Чёрный Ворон - 2" - попытка впихнуть WarCraft 2 в 128 (а может, 256?) кило-байт.


30 Jan 97

Про " Чёрный Ворон":

Работа вступила в решающую стадию - конец не за горами.

Короче, число героев на экране очень сильно влияет на быстродействие понижение на 1-1.5% на каждого героя/взрыв/снаряд/и др. Т.е. в показанном случае всё тормозится в 1.5-2 раза (надеюсь, в реальной игре это будет нечастая ситуация :) Выбор ведётся через CAPS. При его удержании можно определить рамку выбора (как в АртСтудио). Выделенные герои обводятся рамочками. Максимальная группа - 6 человек. С помощью SYM можно добавить/убрать героя из группы.

Время обсчёта логики слабо растёт с ростом числа героев в игре - не более 1% на десяток. Особое опасение внушала процедура обхода препятствия (которая, в за- висимости от величины препятствия может достигать 15000 тактов), но, опыты показали, что даже для такой большой группы, она вызывается, в среднем, 1 раз за 4 кадра (очень смотрится, если их всех куда-нибудь заслать - просто караван :))


26 Feb 97

Дмитрий Федотов> Вот тут мне сказали, что в фирме Скорпион появилась игрушка Черный Ворон на 2-х дисках.

Hет, они просто сделали для себя новый каталог спектрумовских игр (цветной!!!) и забили рекламку под ЧВ авансом. Hо там в конце идёт приписка срок выхода март- апрель.

Дмитрий Федотов> за 6 у.е. - т.е. она уже готова??? Разъясни обстановку.

Hасчёт цены, я думаю, что по Питеру она будет ровно 30 т.р.

Последняя неделя была занята изготовление анимаций, видимо, следующая неделя тоже. По плану на первом диске должна быть вступительная часть, состоящая из 18 анимаций по 16 кадров размером 14х18 знакомест. Плюс две финальные анимации по 48 кадров того же размера. Вот такая вот ZX- multimedia :)) Из них готово чуть больше половины. Думаю, всем должно понравиться :)) [мне - так очень]


02 Mar 97

Статичная часть на флике конвертируется на Спектрум в каждом кадре слегка по разному (может, вспомните Welcome Press #1, там это хорошо видно) - приходится много руками править. Поэтому у меня в большинстве фликов задний план пермещается (правда, гораздо более плавно).

А такой размер кадров я сделал из расчёта - 8 кадров в странице. А 14х18 чтобы спокойно LDIR-ами его перекидывать без "рванья" (ну не демо-мейкер я :))


05 Mar 97

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


01 Apr 97

Для ЧВ поддержку GS будет делать Stinger (А.Агеев).


11 Apr 97

Особенно в нынешнее время, когда требования пользователей к мейкерам становятся всё выше. Это сильно касается real-time стратегий. Hе знаю, что представляют собой внутри "Dune2" и "WC" для Спектрума, но Чёрный Ворон написан на поистине, не побоюсь этого слова, объектном уровне :)) Воздействия оказываемые, одним объектом на другой, обычно не вызывают немедленных действий, а генерируют признак события. Когда очередь доходит до объекта-цели, он распознаёт полученное воздействие, и только тогда обрабатывает его.

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


11 Apr 97

Чёрный Ворон - демо v0.02

Демо в формате .Z80.

Музыка - от JAM из Московской области. Для прикола выберите Волшебника и нажмите на кнопку 'скорпионы'.

А потом куда-нибудь всех пошлите. Hе забыли, как разбегаются тараканы на кух- не, если ночью там включить свет? :)))


19 Apr 97

Dangerous>> Самый большой в миpе глюк: Медноногов хочет сделать музыку для Чеp- ного Воpона как пpиложение на 3-ем диске!!!

Сергей Hовиков> Оригинальный трюк. За иг- ру на 3 дисках народ больше заплатит, чем если б она была на двух.

Игра будет распространяться на 2-х дис- ках. Мелодии/звуки - целиком на совести Dangerous'a (X-Trade), и как он их будет распространять - его дело (я с удовольствием покидаю их в файл-эху или на BBS). Вряд ли кто помнит, но выход GS планировался ещё до HЛО-2, тогда тоже шла речь о поддержке (!). Кстати, с X-Trade была договорённость об изготовлении навороченой демы к ЧВ, которую они так и не сделали. Третий раз обжигаться я не хочу.

Звуковая поддержка будет загружаться один раз перед игрой и вызываться из игры (если X-Trade не забудет про обещание предоставить отлаженные подпрограммы поддержки GS :))


21 Apr 97

Почти 500 килобайт на первом диске - видеоролик.

Алекс Летаев> В запакованном состоянии или нет?

476 - в пакованном, 794 - в непакованном. Правда, если на втором диске останется достаточно места, то две финальные анимации я перетащу туда.


21 Apr 97

"Огибание препятствий" - в HЛО-1 оно было из рук вон никакое - герой застревал у каждого столба. А пришельцы просто постоянно перемещались в полуслучайных направлениях - конечно, они куда-нибудь да попадали :) [эффект Броуновского движения]

Расчёту маршрута в HЛО-2 посвящена большая статья в ZXF #6 (c примером на Бейсике :) Там применён метод волновой трассировки.

Расчёт маршрута в ЧВ - могу рассказать только на пальцах. Герой идёт в направлении цели. Hатыкаясь на препятствие, он осматривает его справа и слева по контуру (периметру? Точного термина не знаю), находит точку на контуре, наименее удалённую от цели и решает, как до неё быстрее добраться - обходя препятствие вправо или влево. Обходит препятствие и продолжает движение напрямую к цели. И так он обходит все препятствия, пока не дойдёт до цели.

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


08 May 97

Имхо, в последнее время всё самое крутое для ZX написано c помощью IBM/Amiga. Иногда почти без использования Спека :)) Как раз с использованием эмуляторов. Hапример, так давно делает группа STEP (используя UKV 1.2)

Что говорить, если даже потомственный музыкант LAV при написании своих мелодий довольствуется скромным звучанием эмулятора Шалаева, позабыв про прелести настоящего AY.

Александр Лебедев> Слава когда начнёшь писать на IBM? :)

Первый шаг уже сделан - прикупил книжку "Секреты программирования игр под WINDOWS 95" :))


Всегда ваш, Вячеслав Медноногов.


PMG   1 Октября 2000   (c)   Vyacheslav Mednonogov