Info Guide #11
05 июля 2015

Игрушки - Metal Man Reloaded: История создания от Oleg Origin.

     Metal Man Reloaded
   Metal Man Reloaded: История создания
Oleg Origin 

   Это  игра  в жанре  Action с некоторыми
квестовыми элементами и отдельными подуро─
внями в жанрах Arcade и Puzzle.
   Игра сделана по мотивам моей игры Metal
Man 1997 года.В оригинальной игре был сде─ 
лан только один уровень; планировалось ещё
какое-то количество, но второй  я так и не
завершил.  Игра  имела  очень  примитивный
геймплей и кучу мелких глюков. В то  время
я не пользовался ассемблером, писал напря─
мую в машинном коде, что,в сочетании с не─
достаточным опытом,служило причиной топор─
ности геймплея всех моих старых игр.
   На  момент  начала  работы на Metal Man
Reloaded у меня имелось несколько десятков 
проектов  игр  в различных  жанрах, и идея
сделать ремейк  наивной старой игры совсем
не была  для меня приоритетной. Изначально
я не планировал  делать ничего масштабного
- просто повторить игру на качественно но─
вом уровне, используя графику и сюжет ори─
гинала.

   Я начал работу над игрой летом 2011 го─
да, и к новому году сделал движок и первый
уровень примерно так, как я,наверное,хотел
бы видеть  это ещё в 97-м. Несмотря на то,
что  внешне игра получилась довольно похо─
жей на оригинал,объём и качество кода этих
двух игр ( Metal Man и Metal Man Reloaded)
несравнимы. Вся графика была тоже значите─
льно  переработана, а  в расширенную карту
уровня был добавлен цвет.
   Интересно, что единственным куском кода
из старой игры стал эффект "расползающего─
ся" экрана при гибели.
   Кстати,о карте:в оригинальном Metal Man
она  хранилась  крайне нерационально: байт
на каждое знакоместо. В Metal Man Reloaded
карта  хранится в виде блоков размером 1*8
символов. А  поскольку  высота  этажей - 9
знакомест, то полы описаны отдельным одно─
битовым идентификатором (старший бит инде─
кса блока).На каждом из уровней 128 блоков
карты (несколько  первых - специальные ти─
пы),которые состоят из 128 символов. Полу─
чается по килобайту на каждый из этих мас─
сивов (плюс ещё цвет для символов), но они
сохранены  в  "двухкилобайтном"  формате с
прямым доступом по индексу,потому я смешал
их  с отступом в 128 байт, закрыв "дыры" в
данных. Для игры написан собственный реда─
ктор уровней.

   В начале 2012 года  я временно забросил
работу  над игрой, в которой был полностью
готов первый уровень.Разумеется,можно было
просто нарисовать ещё несколько карт уров─
ней  без  переработки движка, но, согласно
родившимся  у меня  на  тот  момент идеям,
каждый  уровень должен был стать во многом
уникальным.
   Лишь летом 2013 я написал ещё два уров─
ня игры (4-й, затем 2-й). Каждый уровень в
игре уникален, так что их написание факти─
чески  стало сравнимо с написанием ещё од─
ной  небольшой  игры. Хотя  второй уровень
игры - самый насыщенный и разнообразный, я
сделал его довольно быстро благодаря хоро─
шо проработанному  первоначальному концеп─
ту. После этого  я отвлёкся  на работу над
Rikki-Tikki-Tavi,  которую   сделал  почти 
полностью. Наконец, в конце 2013 я доделал
уровни 3 и 5. Заставка была нарисована уже
в начале 2014.

   Получается,проект растянулся на три го─
да. Наверное,лучше так не делать =). Прое─
ктов  у меня всегда много, и это далеко не
только игры для Спектрума. Для того, чтобы
остановиться  на одном-единственном и сде─
лать его "за один раз" от начала и до кон─
ца - пыла и интереса не всегда хватает.Ча─
сто  хочется перекинуться на что-то другое
- получается, что одновременно всегда веду
несколько проектов. Возвращаться после до─
лгого перерыва непросто - приходится долго
разбираться в своём же коде.В определённой
степени  не  растерять  интерес  и довести
проект до конца помог также конкурс, в ко─
торый я вписался. Хотя к тому времени дви─
жок  и  3 из 5 уровней  были уже полностью
готовы, и я в любом  случае  просто обязан
был доделать игру.
   Моя  подруга Стэлла Арагонская значите─
льно  помогла  мне  с завершением проекта,
также  я включил  в состав дополнительного
саундтрека  одну её композицию  в качестве
бонуса.
   Кстати, заглавную  биперную  композицию
игры я писал в ModPlug трекере,конвертиро─
вав её собственным конвертером в собствен─
ный  биперный  движок. Для дополнительного
саундтрека  я в ту же самую мелодию поста─
вил  "нормальные человеческие" инструменты
и затем дописал гитары, перкуссию и эффек─
ты. Затем  написал две гитарные композиции
(одну из них - на основе главной темы).
   Я  сделал  русскую  и английскую версию
игры (после релиза зарубежные спектрумисты
помогли  сделать  версии  еще  на  четырёх
языках),  а  также  кассетную  и  дисковую
(TR-DOS). Кассетная  и дисковая версии от─
личаются  только  загрузчиком: в  дисковой
версии  уровни  подгружаются  из BASIC, в
кассетной - программа запускается с друго─
го адреса,и вся дальнейшая загрузка проис─
ходит  без  выхода вBASIC. На ZX Spectrum
48K уровни загружаются с кассеты отдельны─ 
ми блоками,а для расширенной памяти реали─
зована  единовременная загрузка всей игры.
В версии дляTR-DOS независимо от количес─
тва  памяти уровни подгружаются с диска по
мере прохождения игры.

                  * * *

   Поскольку  в 90-е я учился программиро─
ванию  по  книге "Как написать игру для ZX
на ассемблере", то и познакоместный формат 
спрайтов  и  процедуру  их  вывода  в игре
Metal Man использовал из этой книги.Причём 
в то время  я понятия не имел, как сделать
зеркальный вывод, поэтому  хранил  в памя─
ти  отзеркаленные  спрайты. Для  Metal Man
Reloaded я взял за основу ту же процедуру, 
но на основе неё сделал гораздо более про─
двинутую и универсальную спрайтовую подси─
стему. Разумеется,добавил зеркалку,возмож─
ность  вывода как на виртуальный, так и на
физический  экран, предварительную  грубую
проверку  попадания  в  экран, возможность
использования  как цветных спрайтов, так и
спрайтов  без цвета. Но самое интересное -
я модифицировал формат, позволив создавать
спрайты, где одна  часть знакомест цветная
и  печатается напрямую, а другая - не рас─
цвечивается  при выводе и выводится поверх
имеющейся фоновой графики через любую ука─
занную  побитовую операцию. Таким образом,
для  тех  знакомест, на которые приходится
лишь пара-тройка пикселей, стало возможным
оставлять  цвет  фона, и наложение цветных
спрайтов на цветной фон происходит "безбо─
лезненно".Более того,при выводе цвета (как
спрайтов,так и карты) используются опреде─
лённые алгоритмы смешивания с существующим
атрибутом.  Наконец,  имеется  возможность
использования  нового  атрибута  для всего
спрайта, что позволило использовать одина─
ковые части спрайтов для разных типов вра─
гов  и расцвечивать спрайты красным цветом
при попадании. Вдобавок, для спрайтов гла─
вного  героя используются жирные частичные
маски,ещё более скрывающие клэшинг.Правда,
эти  алгоритмы рассчитаны на использование
тёмного  фона, и  в пятом  уровне, где вся
игровая область  инвертируется, не все они
хорошо  работают.  Кстати, про  инверсию -
мне  показалось  интересным  сделать  этот
приём, ведь  чаще  всего  в  играх во всех
уровнях   используется  одна  схема - либо
светлое на тёмном, либо тёмное на светлом.
Я "выделил" пятый уровень, решив  задачу в
лоб: используются новые наборы спрайтов, в
том числе  для главного героя  и для взры─
вов.
   Параллаксный скроллинг больше всего ис─
пользуется  на  третьем уровне при езде на
мотоцикле. Там  можно  выделить  6  слоёв,
движущихся  с разной  скоростью: здания на
дальнем плане - на 1 пиксель, зелень на 2,
промышленные  объекты  на 4, далее забор -
на целое знакоместо (он не скроллируется,а
быстро отрисовывается черезPUSH ), дорога
(если судить  по  разделительной полосе, а
также  по лежащим  на ней минам) - на пол─
тора знакоместа (хотя  трамплины и барьеры
из этой скорости выпадают,и именно поэтому
разделительная  полоса на это время убира─
ется) и, наконец, нижний бордюр и столбы -
на  два. Есть ещё мелкие элементы графики,
которые движутся с другой скоростью,только
чтобы  не казались застывшими, но они не в
счёт. Разумеется,пересечения слоёв сведены
к минимуму. Активное  действие  происходит
лишь  в одной  трети экрана, верхняя треть
скроллируется на  реальном  экране, а пара
строк  нижней  на нем же перерисовываются.
Небольшая  часть  "выступающей"  из  одной
трети  графики дорисовывается уже напрямую
на экран. Столбы, разумеется,сделаны атри─
бутной  заливкой. Хотя этот эпизод игры не
слишком  продолжителен, мне было интересно
потратить  на  него  немало времени именно
ради реализации многослойного скроллинга.
   Кстати,на первом уровне,хотя количество
слоев  и не так  бросается в глаза, но они
тоже есть: город на дальнем плане неподви─
жен, облака бегут на пиксель (можно отклю─
чить  в настройках  для увеличения скорос─
ти), красные бочки на среднем плане - на 4
пикселя, вся основная карта на знакоместо,
а пол  на нижнем  этаже выполнен отдельным
элементом с использованием перспективы.

   По поводу скриптования вопрос был решён
так: в  каждом  уровне  используется  свой
собственный основной цикл,и,стало быть,все
особенности  игрового  процесса  на каждом
конкретном уровне  можно  задавать жёстко.
Например, в каждом уровне  по-своему орга─
низован  задний  план, установлены  задачи
миссии и идёт  проверка их выполнения, ор─
ганизованы  режимы использования различных
транспортных средств... Так что затемнение
фона в первом уровне при входе в туннель -
это всего лишь жёсткая проверка конкретных
координат  в  режиме  летающего мотоцикла.
А  уничтожаемые  терминалы  на  4-м уровне
для  простоты  описаны как враги, со своим
bounding box'ом,и поставлено простое усло─
вие:уничтожение трёх таких "врагов".В этом
плане пришлось потрудиться над вторым уро─
внем: там  действительно потребовалось бо─
льшое количество кода  для описания работы
погрузчика, пресса, крана, переключателей,
входа в автобус и многого другого. Разуме─
ется, используются  и многие универсальные
для  всех  уровней процедуры. Те же лифты,
например.  Здесь  потребовалось  один  раз
описать  принцип  их работы, и затем уже в
карте  можно  было ставить их между любыми
этажами. А вот, например, запрещать врагам
пользоваться  каким-то определенным лифтом
- это уже опять же жёсткие условия для ка─
ждого конкретного уровня...
   Конечно, всегда хочется иметь под рукой
более универсальный движок, где можно было
бы задавать самые разные интерактивные ди─
намические объекты, и в котором  персонажи
могли   бы  корректировать  свои  действия
исходя из текущих  условий. Но я совсем не
планировал использовать движок MMR для по─
следующих проектов,поэтому в данном случае
разработка возможностей скриптования  была
бы только лишней работой. Надеюсь,в каких-
то будущих  проектах  мне удастся реализо─
вать  более универсальную систему описания
уровней, хотя  подлинная  универсальность,
исходя из ресурсов Спектрума - всё же уто─
пия.

   Я  всё  время  старался  контролировать
объём  оставшейся памяти, соизмерять его с
тем, что ещё предстояло реализовать по за─
думке. Также,разумеется,я максимально уни─
фицировал  схожие моменты поведения врагов
- они  обращаются к общим подпрограммам. А
некоторые процедуры  используются как вра─
гами, так  и игроком - например, использо─
вание  лифтов. Помогла  и нарезка спрайтов
на  отдельные куски и использование их для
разных типов  врагов - с изменением цвета.
От  каких-то идей приходилось по ходу раз─
работки отказываться, когда  память подхо─
дила  к  концу,  либо  попросту  исключать
из  уровня  определенные типы врагов. Если
посмотреть на карандашный набросок второго
уровня, можно  увидеть двух крупных четве─
роногих роботов. Нехватка памяти - одна из
причин того,почему их не оказалось на этом
уровне - но в итоге  я нашёл этому монстру
лучшее применение, использовав его  в сле─
дующем  уровне не только в качестве врага,
но  и как транспортное  средство - так что
"всё к лучшему", даже нехватка памяти =)
   Изначально я не планировал использовать
расширенную   память   для  единовременной
загрузки  всех  уровней игры. Но уже после
завершения проекта оказалось, что вся игра
занимает  как раз чуть менее128 килобайт,
и  я  добавил  эту  возможность.  Пришлось
немного  повозиться, так как блоки целиком
в страницу не умещаются. 

                  * * *

Hippiman> Как  родилась  идея самой первой 
игры из серии Metal Man? Мир игры похож на 
те, что  часто  были  в боевиках  80-90-х: 
Робокоп, Судья Дредд. Чем ты вдохновлялся? 

В точку! Что, собственно, не удивительно -
кто в начале 90-х не смотрел боевики? =) И
что  касается игр: Robocop - одна из люби─
мых игр на Спектруме.Очень нравились сего─
вские  Judge Dredd  и Demolition Man, хотя
Сеги  у меня не было - просто смотрел, как
играют друзья. Спрайты первой игры рисовал
на основе графики  из Robocop. Перерисовал
с экрана телевизора,повторил в Art Studio,
затем увеличил на одно знакоместо в высоту
(результаты  кривого увеличения хорошо за─
метны),изменил и расцветил. Разумеется,эти
недочёты графики я поправил в MMReloaded и
ещё больше - в MMRemixed. Сегодня,конечно,
я стараюсь  -  напротив - не  заимствовать
никакие элементы графики,кода и сюжета. Но
в то время  просто "повторить Робокоп", да
ещё  и в цвете - казалось интересной зада─
чей. Кроме того, тема"а что,если сделать,
как на  SEGA (или PC, Dendy)"  была  среди
моих друзей очень популярной. В числе моих
первых  недоделанных проектов, помимо неу─
дачной  попытки  "портировать"  Aladdin на
Спектрум, была, скажем,игра,похожая на из─
вестную  в те времена  Cyberia - я пытался
примитивным  способом  (набор пререндерён─
ных кадров) красиво реализовать  полёт над
морем, а в качестве  секретной лаборатории
выступало  здание  с  заставки  Impossible
Mission II. По реализации  это было похоже 
на мою игру Aggressor, но никаких материа─
лов не сохранилось.

Hippiman> Как  рождается новый уровень? Ты 
какое-то  время обдумываешь его концепцию, 
рисуешь план,а потом садишься и его вопло─ 
щаешь, или уровень рождается сам собой, ты 
садишься за редактор, и уровень получается 
легко прямо в процессе творчества? 

По-разному. Конечно, если изначально нари─
совать детальный план, как я сделал это со
вторым  уровнем  MMR, то разработка пойдёт
гораздо быстрее.Иногда в редакторе уровней
делаю сначала общий набросок плана,а затем
в фотошопе  или  на распечатке прикидываю,
что и где ещё может уместиться,как органи─
зовать лабиринт. Иногда сразу в редакторе.
В этом случае  зачастую уровень выглядит в
итоге совсем не так, как я его представлял
=). В том же MMR все уровни созданы разны─
ми способами. Но общая концепция,разумеет─
ся, всегда есть: нужно же представлять, по
крайней  мере, какую локацию мы делаем - а
отсюда  вытекает и возможная приблизитель─
ная  планировка, и наполнение  какими-либо
объектами.

Hippiman> А что из себя представляет реда─ 
ктор уровней для этой игры? Это самодоста─ 
точная утилита, которая на выходе даёт би─ 
нарный объект, уже готовый к вставке в иг─ 
ру, или набор небольших утилит? 

Все  необходимые  утилиты я пишу себе сам.
Всё кросс-платформенное - на реальном Спе─
ктруме  утилиты писал лишь в 90-е. Почти в
каждой игре (речь в том числе о нескольких
разрабатываемых сейчас) используется собс─
твенный  формат  карты, поэтому для каждой
пишу  свой редактор уровней в самом начале
разработки.  Редакторы  довольно  простые:
карты  из блоков (тайлов), блоки из симво─
лов,плюс набор жестко описанных объектов и
какие-либо дополнительные параметры. Рабо─
чие файлы уровней - массивы без какой-либо
оптимизации, а на  выходе  получается  уже
готовый  набор  бинарников  либо текстовый
файл с метками для дальнейшего обращения к
ним из программы - всё зависит от конкрет─
ной игры  и её формата  карты. Кроме того,
конвертер графики из.BMP у меня тоже свой
собственный - он поддерживает все мои фор─
маты спрайтов, которых набралось уже с де─
сяток, простое конвертирование экрана,раз─
личные  варианты сохранения шрифтов, в том
числе переменной  ширины и увеличенной вы─
соты, запись построчных изображений и кар─
тинок с простейшей упаковкой и всё прочее,
что  мне только понадобится. Для ускорения
работы  конвертер графики вызывается в том
числе из-под редактора уровней,и для того,
чтобы  увидеть  в редакторе уровней только
что обновленную в фотошопе графику блоков,
достаточно  нажать  одну  кнопку. Я многое
делаю  для автоматизации своей работы. На─
пример, мой  блокнот  показывает  мне  все
возможные ассемблерные мнемоники,позволяет
переключаться  между всеми связанными фай─
лами,сам обращается к SjASM поF9, показы─
вает  ошибки компиляции и запускает эмуля─
тор. А на его создание ушло лишь несколько
часов.И о конвертерах музыкальных форматов
я  также  упомянул. Выпускать  что-либо из
этого кросс-платформенного зоопарка я пока
не планирую - всё же все эти утилиты дово─
льно узкой направленности,ориентированы на
мои собственные принципы работы,имеют лишь
зачатки интерфейса и не представляют собой
законченные продукты.

Hippiman> А как ты тестируешь свои игры? Я 
имею в виду  не ошибки кода, они, как пра─ 
вило, находятся легко, а геймплей и дизайн 
уровней. Тебе, как разработчику,все уровни 
должны казаться лёгкими, а все решения,ко─ 
торые должен принимать игрок,- очевидными. 
Ты  привлекаешь  кого-то, когда  игра  уже 
закончена, или  советуешься с кем-то ещё в 
процессе разработки, или просто стараешься 
поставить себя на место игрока? 

Сегодня  часто встречаются примеры коллек─
тивной работы над играми, когда каждый мо─
жет  дать совет - в том числе относительно
игрового  баланса. В данных случаях хорошо
выверенный геймплей сделать проще. Но дело
в  том, что  мне  интереснее не показывать
процесс  разработки, а  сразу представлять
готовую игру, по возможности в окончатель─
ной версии. Я ожидаю,что в этом случае иг─
рок будет испытывать такое же впечатление,
какое  можно было получить 30 лет назад от
только что  купленной кассеты и первой за─
грузки пока ещё незнакомой  игры. Ради та─
кого эффекта я практически никому не пока─
зывал  MMR ровно до момента релиза, и тес─
тировал всё самостоятельно. Действительно,
свою  игру  пройти просто, поскольку точно
знаешь все нюансы поведения врагов и как с
этим  бороться, идеально  знаешь  карту  и
расположение  всех объектов. Вместе с тем,
была  у меня такая несколько странная идея
- сделать  игру действительно крайне слож─
ной, какими  были  сотни  игр  80-х годов.
Потому  я просто добивался такого баланса,
когда  сам я проходил ее "почти не глядя",
и принимал это состояние за проходимую, но
очень  сложную  игру. В  итоге по-честному
прошли немногие, как я и предполагал. Были
просьбы  уменьшить  сложность, и  я сделал
это  в первом уровне  Metal Man Remixed. В
следующих играх я буду стараться применить
аналогичное решение - делать первые уровни
легко проходимыми,с дальнейшим увеличением
сложности. Сегодня появились желающие тес─
тировать  следующие  игры - думаю, что  не
буду отказываться от этого. Ибо чрезмерная
сложность  классических  игр  зачастую как
раз была следствием того, что писал и тес─
тировал игру один и тот же человек.Кстати,
об  ошибках  кода - несмотря  на то, что в
итоговом релизе  никто  никаких  глюков не
встретил, мне в дальнейшем всё же попалось
несколько грубых ошибок, которые лишь слу─
чайно  не приводили к "печальным последст─
виям". Неудивительно, что  подобное  можно
встретить практически в любой существующей
игре - поэтому  вопрос "финального релиза"
всегда очень непрост.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
От редактора - я сделал несколько заказов по почте. Это во-пеpвых GENERAL SOUND у NEMO.
Кусать подано - Праздничное меню для тех, кто хочет поесть и выпить за наше здоровье.
Проза - Hиколай Дронин. В союзе.

В этот день...   19 ноября