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. В следующих играх я буду стараться применить аналогичное решение - делать первые уровни легко проходимыми,с дальнейшим увеличением сложности. Сегодня появились желающие тес─ тировать следующие игры - думаю, что не буду отказываться от этого. Ибо чрезмерная сложность классических игр зачастую как раз была следствием того, что писал и тес─ тировал игру один и тот же человек.Кстати, об ошибках кода - несмотря на то, что в итоговом релизе никто никаких глюков не встретил, мне в дальнейшем всё же попалось несколько грубых ошибок, которые лишь слу─ чайно не приводили к "печальным последст─ виям". Неудивительно, что подобное можно встретить практически в любой существующей игре - поэтому вопрос "финального релиза" всегда очень непрост.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября