Nomad Alone Coder> В прошлом году я показывал игру Nomad на DiHalt'е. К сожалению, нам выделили не самое лучшее время, а я был не в лучшей форме - застрял на 2-м уровне и не смог показать весь блокбастер. Hippiman> На самом деле для DiHalt'а нужно было сделать облегчённую версию с более мощным оружием или меньшим количеством врагов. Игра получилась действительно сложной, и для её прохождения нужна тренировка или хороший скилл в этом жанре. Alone Coder> Расскажи, как родилась идея Номада? Ведь сделать приглядный скролл в цвете на точку - это очень сложно... И почему он Номад? (Помню игру детства с названием N.O.M.A.D :)) Hippiman> Я изначально планировал в игру вставить сюжет в постапокалиптическом, фантастичес─ ком мире, разрушенном войной. Где остатки человечества изо всех сил пытаются выжить, а остатки боевых машин-роботов методично это человечество истребляют, выполняя пос─ леднюю заложенную в них программу. А главный герой - бродяга, как безумный Макс в исполнении Мела Гибсона. Он колесит на своем байке по миру в поисках пищи и топлива и однажды по радио ловит сигнал о помощи. Он узнаёт, что далеко на востоке есть долина, где собираются выжившие, но её атаковала армия роботов. Герой решает идти на помощь. Вот как-то так. Писатель из меня ника─ кой, и я прикинул,что могу банально не по─ тянуть всё это дело - красиво описывать и нарисовать в заставке. Да и сюжет шмапу особо не нужен в пяти-то уровнях, и я ре─ шил предоставить всё воображению игрока. Сделал только вступление и концовку (я их из-за размеров даже в отдельные модули за─ пихнул). Alone Coder> Всех ли врагов можно избежать? Или по─ теря энергии неизбежна? Hippiman> Врагов можно избежать всех. Я специаль─ но делал так, чтобы игру можно было пройти без потерь. Но в некоторых местах это сло─ жно. В конце первого уровня, прямо перед боссом избежать вражеской пули очень слож─ но, нужно сделать очень точный прыжок. Иногда нужно просто знать, откуда появится враг. Некоторые уровни предпочтительнее проходить с определённым оружием. Однако, когда я тестировал игру, то проходил её наNormalбез потери жизней и без особых проблем. Сейчас нужно потрени─ роваться, потерял навык. Самое сложное место в игре - 2-й уро─ вень. Базовый пистолет слишком слаб для большинства врагов, а магнумом сложно ору─ довать из-за низкой скорости стрельбы. Лучше всего этот уровень проходить с УЗИ или обрезом.Для этого нужно немного потренировать 1-й уровень и постараться набрать на нём как можно больше очков. Это на самом деле несложно. Если это сделать, тогда 2-й уровень покажется нам─ ного проще. Alone Coder> Как скриптуются враги? Как скриптуются уровни? Hippiman> Это интересный вопрос :). В Nomad я по─ ступил хитро. Каждый уровень - это не красиво расста─ вленные по сетке враги, а по сути скрипт - последовательность команд самой разной на─ правленности. Все команды выполняются строго по оче─ реди и по времени. Т.е. очередная команда не выполнится, покуда глобальный счётчик времени не дойдёт до определенного значе─ ния. Команды есть самые разные: -создать монстра -изменить скорость скролла -сделать чекпоинт -выпустить босса -перейти на несколько команд назад с отмоткой времени (так делаются циклы) А с их помощью делаются паттерны. Использование паттернов - некого набора команд, который повторяется несколько раз, сильно упростило мне жизнь во время разра─ ботки уровней. Вместо того, чтобы созда─ вать каждого врага по отдельности, я мог создать одного, а затем указать, сколько раз его нужно повторить. Монстры не скриптуются никак. У них нет ИИ как такового. Поведение каждого монстра задают 2 параметра: тип движения и тип стрельбы. Все типы движения и стрельбы жёстко за─ даны в коде игры и тоже бывают на все слу─ чаи жизни: -двигаться зигзагом, прямо в игрока, по прямой, выскакивать из под пола, лететь прямо, а потом взрываться и пр. -стрелять в каком-то направлении, в иг─ рока, стрелять другим монстром,не стрелять вообще и т.д. Комбинируя разные типы движения, стре─ льбы и паттернов, я добился разных интере─ сных эффектов. Например, судно на воздушной подушке из 2-го уровня, которое плывет на фоне - это моб с очень толстой бронёй и очень малень─ ким хитбоксом, который стреляет вверх с определенной периодичностью. Следом за ко─ мандой спауна этого моба идёт цикл, кото─ рый спавнит энергетические шары вверху эк─ рана. Энерго-шары - тоже мобы. И этот цикл синхронизирован с движением судна так, чтобы казалось, что эти шары - это его снаряды. Это простой пример. На самом деле при помощи паттернов, циклов и разных типов движения можно сделать много интересного. Alone Coder> Сколько примерно времени нужно на пол─ ное прохождение? Как ты его отлаживал? Hippiman> Первый уровень до босса, если не терять жизней, проходится примерно за1.5минуты. 2-й - примерно за 3 с копейками. Последую─ щие - точно не помню, но в среднем от4до 5 с половиной минут на уровень. Получается, что с боссами и потерей жи─ зней игра проходится в среднем минут за 30-40. Больше 5минут на уровень - уже сложно для игрока. Банально устаёшь физически от постоянной концентрации и начинаешь оши─ баться. А отлаживал я достаточно просто. Делал часть уровня: одну или две волны. Обычно это был отрезок от одного чекпоинта до другого. И многократно его проходил, покуда правильно не выстраивал все команды по времени, не расставлял монстров так, чтобы было интересно, но и не слишком сло─ жно, чтобы можно было пройти без поврежде─ ний. Потом переходил к следующему и т.д. Когда уровень был закончен, я многократно перепроходил уровень целиком и дошлифовы─ вал то, что проглядел ранее. Подстраивал части друг к другу. Старался также учесть разные стили про─ хождения. Кто-то может быстро всех пере─ бить,и ему придется ждать следующую волну, а кто-то наоборот - завязнуть, и следующая волна его подкосит окончательно. Приходилось искать золотую середину. Каждый уровень был изначально задуман для прохождения оружием определенного уро─ вня и с определенным набором способностей. То есть, например, на 3-м уровне с базовым пистолетом делать нечего, а на 4-м и 5-м - без двойного прыжка. Соответственно, у иг─ рока должно быть определённое количество денег, чтобы его купить + должно остаться на новые жизни и раскачку энергии. Примерное количество денег после прохо─ ждения уровня я определял по своим прохож─ дениям. Играл несколько раз с разным ору─ жием, потом считал среднее арифметическое заработанных на уровне очков и уменьшал на треть. Хотя набор очков - это понятие очень растяжимое, и виной тому система множити─ лей. Если регулярно "лажать", то набёрешь совсем мало очков. Если же играть "чисто" и не попадать под пули, то с каждым сбитым врагом будешь увеличивать множитель очков и, соответст─ венно, сильно увеличивать финальные очки. Если войти в ритм, то уже на первом уровне можно вполне набить очков на покупку "калаша" (штурмовой винтовки,она же АКСУ), да ещё и на дополнительную жизнь остане─ тся. А можно там же потратить все жизни, а выигранных очков не хватит даже намагнум. Alone Coder> Игра сильно отличается от прочих игр для ATM Turbo. В ней используются какие-то ассемблерные процедуры сверх обычного Evo SDK? Hippiman> Да кроме работы с диском и твоих функ─ ций работы с расширенной памятью, по сути, и ничего. Всё делалось на C. Я использовал несколько функций быстрой математики,но они тоже были написаны на C. В глубоком использовании ассемблера просто не было нужды. Alone Coder> А можно ли на подобном движке сделать что-то типа Midnight Resistance? :) Hippiman> Midnight Resistance - нет, конечно :) Этот движок для такого не расчитан. В целом этот движок можно охарактеризо─ вать одним словом - экономия.Ради скорости мне приходилось экономить на всём. Так как аппаратного скроллинга нет, а программно горизонтально двигать экранную область из- за странной организации памяти и больших её объемов очень долго,даже14 MHzне хва─ тало на фреймовый скролинг, мне пришлось выкручиваться. Даже простое копирование изображения на экран происходит долго,т.е. я вообще никак не мог сделать скроллинг всей игровой об─ ласти. Я поступил хитрее. Всю графику уровней я рисовал таким образом, чтобы не было за─ метно, что вся игрвая область поделена на небольшие полосы. Дорога, по которой движется игрок, сис─ тоит из двух полос по8pxв высоту каждая. Эти две полосы перерисовываются почти каж─ дый кадр. А фон я сделал из трёх полос: две по8pxи одна в1бpx.И тут меня выру─ чил эффект параллакса. Я расчитал интервалы движения этих по─ лос так, чтобы никогда не нужно было дви─ гать их все сразу. За раз перерисовывается только одна полоса. Таким образом получилось, что в макси─ мальной нагрузке мне нужно было пере─ рисовать 1бpxдороги и1бpxнижнего слоя параллакса. Что уже совсем немного,и оста─ валось ещё много процессорного времени для движения большого количества спрайтов.Хотя в особо напряжённых моментах мне приходи─ лось останавливать движение вообще, чтобы сэкономить ещё и на нём. (Позже при помощи асма я сделал пару функций вертикального скролинга, об этом читайте в отдельной статье.Это уже заметно быстрее и плавнее. Но для нормальной ско─ рости всё равно нужно было бы делать ани─ мацию полосками. Flash_zx очень умело при─ менил эти функции в своей демке Battle─ toads ZX_Evo .) Но при желании переделать движок под стандартные шмапы типа R-Type,Zybex и т.д. вполне можно!