Создай свою собственную игру на ZX Spectrum. Часть 6

Новая часть семинара “Создай свою собственную игру на Спектруме” на Чуррера от Mojon Twins. В этой части мы начнем располагать на карте отдельные элементы, которые мы до этого создавали. Без дальнейших отступлений, переходим к делу.

Глава 6: Размещение объектов

Прежде всего, скачайте соответствующие материалы для этой главы, нажав на ссылку ниже:

http://www.mojontwins.com/churrera/churreratut-capitulo6.zip (скачать локально: churreratut-capitulo6).

А что теперь?

А вот теперь-то мы начнем размещать объекты. Это похоже на тот момент, когда, вернувшись из супермаркета с набитыми сумками, ты должен распихать их содержимое по кухне. Это утомительный, но нужный процесс. Конечно, ты можешь этого и не делать, но тогда посмотрим, кому все же удастся найти сосиски. Или, например, фильтры для кофе. Кто-нибудь еще использует фильтры для кофе?

В принципе мы должны просто разместить на карте врагов, объекты и ключи. И нет, мы предлагаем сделать не совсем это:

Churrera map

Каждый объект относится к конкретному окну и имеет серию значений, которые указывают на его позицию, тип, скорость, если это подвижный объект, и другие характеристики. На самом деле, мы говорим об огромной таблице цифр, которая становится занозой в заднице, если создавать ее вручную. Поэтому мы создали кривенькое приложение, чтобы выполнить эту работу в визуальной форме.

Инструмент, о котором мы говорили, и который назвали с большой долей воображения Разместитель (Colocador) – и это никак не связано с запрещенными препаратами – Разместитель помогает не только при создании игр в Чуррера. Каждый проект с использованием тайлов размером 16 х 16 пикселей для любого размера окна может быть сделан с помощью этого приложения. Чтобы не углубляться, скажем, что использовали его для размещения багов в таких играх как Uwol 2 под CPC и Lala Prologue под MSDOS, а также для экспериментального создания чего-то в какой-то 16-битной консоли, чтобы в один прекрасный день  добраться до конца и все окончательно бросить. Да, программа выглядит корявенько, но все же отлично нам поможет.

[Режим сталкера] Конечно, Разместитель – программа для платформ, работающих на Windows. Однако, при ее использовании с gcc и применении Allegro в качестве графической библиотеки, ее довольно просто перевести под Linux. Если ты готов это сделать и таким образом предоставить пользователям этой платформы еще одно приложение, свяжись с нами. Программа дополнительно содержится в файле , так что создать exe-шник под Linux должно быть самой простой задачей на планете.

Базовые понятия: враги и хотспоты

Для начала объясним некоторые базовые понятия, прежде чем начать издеваться над программой размещения, прежде всего потому, что названия, которые мы будем использовать, не настолько интуитивно понятны, как управление в Uchi-Mata.

Churrera kimono

А моё кимоно? Кия-ааа! – Оно грязное! Кия-ааа!

Враги

Начнем с понятия «враги». В Чуррера враг – это те штуки, которые перемещаются по игровому окну и тебя убивают, а еще это подвижные платформы. Да, в Чуррера подвижные платформы – тоже враги. Поэтому когда мы говорим о расположении врагов, мы говорим также и о расположении подвижных платформ. И когда говорим, что в окне могут разместиться максимум 3 врага, считаем также и подвижные платформы. Мы бы могли назвать их, например, «мобильные», но они пришли нам на ум, когда мы уже запустили движок, и Амадор, наша обезьянка-программист, отказалась их переименовывать.

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

Врагов типов 1, 2 и 34 в играх генитального типа) описывают линейные траектории, и они обозначаются первым, вторым или третьим (и четвертым) спрайтом врага тайлсета. Когда мы говорим о линейных траекториях, это относится к 2 возможным вариантам:

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

lineal-4200[1]

Начало <–> конец

Диагональные траектории: Они появились из-за «фичи» движка (побочный эффект, получившийся из-за кривого алгоритма), но мы его оставили, потому что нас торкнуло. Мы реально часто использовали эту опцию. Если начальная и финальная точки не находятся на одной строчке или в одной колонке, персонаж перемещается по прямоугольнику, который создают эти точки, отскакивая от его углов и двигаясь по диагонали.

diagonal-4436[1]

Чё творишь, псих?

Враги четвертого типа, когда используется боковой вид, это подвижные платформы. Они ведут себя точно так же, как и линейные враги, но с одним ограничением: хотя им и можно задать диагональную траекторию, мы не можем гарантировать, что это будет работать правильно во всех случаях. Поэтому можно использовать только горизонтальные и вертикальные траектории.

Враги пятого типа были добавлены, когда мы делали Zombie Calavera. Это тип летучих мышей. Они обозначаются графикой третьего врага тайлсета и имеют особенное поведение: появляются вне экрана, и, если персонаж не спрятался, преследуют его. Если  персонаж спрятался, они пролетают мимо и исчезают с экрана. Мы не пробовали этот тип врагов в обновленной версии Чуррера, поэтому не можем утверждать, что они здесь будут работать.  Решишься попробовать? По умолчанию код для перемещения и управления врагами пятого типа не включен в движок, поэтому его нужно активировать отдельно.

Враги шестого типа не включены в эту версию Чурреры по одной простой причине: они всегда и полностью кастомизируются. В Cheril the Goddess это были слепые летучие мыши, которые тебя преследовали, только если ты приближался к ним на определенное расстояние, а когда отдалялся – возвращались на свое место. В игре Ramiro el Vampiro – это летучие мыши из склепа, которые появляются, когда активируешь люк, и тебя преследуют, пока ты не соберешь все кресты. В Uwol 2 под CPC,  это Fanty на низших уровнях. Для каждой игры, в которой мы использовали шестой тип, мы планировали новое поведение (заново используя отдельные элементы, конечно). Для этого мы оставили эту «лазейку», если нужно кастомизировать поведение для какой-нибудь игры, у нас есть, где это сделать. На этом же движке, даже если ты  создашь врага шестого типа, на экране ничего не появится.

Врагов седьмого типа мы называем НДВ или Невероятно Доставучие Враги. Это линейные преследователи. Эти враги появляются в той точке, которую ты задаешь для начала преследования игрока. Они не могут пересечь сцену. Если игрок может в них стрелять и убивать, они через некоторое время снова появляются в том же месте, где они появились в первый раз. Графика для этих персонажей выбирается наугад из доступных рисунков. Они лучше всего работают в играх с генитальным видом, и ты можешь увидеть их в работе в  Mega Meghan. Так же как и для врагов пятого типа, код для их управления не включен в этот движок по умолчанию, это надо делать отдельно.

mojon twins mega meghan

Мы же будем использовать в Dogmole только врагов 1, 2 и 3 типа, а также подвижные платформы четвертого типа.

В заключающих главах этого учебника, в которых будем говорить о дополнениях и модификациях, увидим, как делать следующие две вещи с движком: добавить шестой тип с кастомизированным поведением и как изменять весь движок врагов, чтобы использовать больше четырех линейных базовых типов: использовать 8 различных типов с анимацией (с использованием кучи памяти в процессе создания). Но до этого еще придется дожить. Рано еще заводиться, не устраивайте бардак!

Хотспоты

Хотспоты (горячие точки) – это, проще говоря, точки в окне, где могут быть размещены предметы, ключи и дополнительные жизни. В каждом окне определяется только один хотспот. Каждый хотспот связан со своими величинами. Если у него значение «0», он будет неактивный, и в нем ничего не появится. Если дашь ему значение «1», то в этом месте появится предмет. Если дашь ему значение «2», то тут будет ключ. Хотспоты со значениями «1» или «2» считаются активными. Когда мы забираем  предмет или ключ с активного хотспота, движок может разместить здесь дополнительную жизнь в следующий раз, когда мы вернемся на это окно.

Когда мы говорим о предметах, мы говорим об объектах, которые начинаются с тайла с номером 17, и который автоматически считается движком игры без дополнительных действий с нашей стороны, кроме как указать ему, что мы используем предметы. Это могут быть зелья в Lala Prologue или кресты в Zombie Calavera, карандаши в Viaje al Centro de la Napia или дискеты в Trabajo Basura. В нашей игре мы будем использовать предметы, чтобы изобразить ящики, которые надо собрать и доставить в университет Мискатоник. Затем, через скрипты и конфигурацию, сделаем, чтобы поведение предметов было особенное (предмет не засчитывается, пока, подобрав его, не оставишь его в определенном месте университета – это очень похоже на то, как работают дискеты в игре Trabajo Basura), но обычно речь идет об объектах, которые надо разместить на карте, используя хотспот первого типа объекта.

Я знаю, что ты собирался у меня спросить: нет, в одном окне не может быть больше одного хотспота, так как это прописано в движке.

Подготовка необходимых предметов

Итак. Закатаем рукава и примемся за работу. Первое, что нам нужно сделать, это скопировать нужные материалы в директорию, где находится Разместитель, т.е. в директорию \enems. Нужно две вещи:  карта игры в формате .map и тайлсет для Mappy в формате .bmp. Для этого копируем \map\mapa.map и \gfx\mappy.bmp в \enems. К марш-броску готовы!

Конфигурация нашего проекта

Когда запускаешь Разместитель (например, дважды кликнув на colocador.exe), появится главное окно, в которое загружаем существующий проект или конфигурируем новый. Т.к. у нас нет существующего проекта, создаем новый.

colocador config

Как видим, в первых двух ячейках нужно ввести имя нашей карты и тайлсета (mapa.map и mappy.bmp, которые должны быть в директории \enems). Затем идут четыре ячейки, которые определяют размер карты и окон. MAP_W и MAP_H должны содержать ширину и высоту твоей карты в попугаях (то есть окнах). SCR_W и SCR_H используются для определения ширины и высоты окон в тайлах. Для игр Чурреры эти значения, как ты уже должен знать, равняются 15 и 10.

Последняя ячейка – это количество врагов, которое появляется в каждом окне. В Чуррера их 3. Нет, если поставишь больше, больше их в игре не появится. Просто все сломается. Поставь 3. Я тебя уверяю, трех вполне достаточно.

Базовая работа программы

Функционирование очень простое. Как раз, потому что сама программа очень простая. Если посмотришь, увидишь таблицу с текущим окном. Если таблица не появляется, или то, что появляется, не относится к первому окну твоей карты, все плохо. Проверь предыдущие шаги, особенно относительно размеров карты и окон.

Чтобы перемещаться по карте (чтобы появилось другое окно в таблице) используем клавиши со стрелками. Попробуй. Если все хорошо, ты сможешь проложить настоящий туристический маршрут по твоей карте.

Если нажмем ESC, программа закроется, что безумно удобно, когда мы все доделали и хотим выйти. Но осторожно: программа просто закрывается безо всяких но. Спокойствие, только спокойствие. Не нажимай ESC, не сохранившись перед этим.  Программа не предупреждает. Она просто закрывается.

Как раз чтобы сохраниться, у нас есть кнопочка S. Давайте нажмем ее прямо сейчас, хотя мы пока ни одного врага не разместили. По умолчанию используем .ene как расширение для архивов Разместителя. Нажми S и в появившемся окошке напиши enems.ene и кликни на кнопку ОК. Мы уже сохранили наше размещение. Делай это очень часто.  Верь нам!

Теперь посмотрим, как это работает. Нажми ESC, чтобы выйти. Проверь, что теперь появился архив enems.ene в \enems. Снова запусти colocador.exe. В этот раз вместо заполнения всех значений, пропиши enems.ene в окне под названием «Открыть существующий проект» (Abrir un proyecto existente) и нажми на кнопку с надписью Загрузить (Cargar). Если все прошло хорошо, у тебя снова появится первое окно карты.

colocador existente

Этот архив enems.ene не используется напрямую в игре. Чтобы в нашей игре появились враги, нам нужно, чтобы Разместитель экспортировал код С. Это можно сделать, нажав кнопку Е. Когда это сделано, появляется диалоговое окно, похожее на окно для сохранения. Вписываем в него enems.h, нажимаем на ОК, и копируем этот архив в \dev. Сделаем это, когда завершим размещение всех врагов и захотим интегрировать их в игру.

Размещение врагов и платформ

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

Прежде всего, нужно установить мышку чуть выше ячейки начала траектории и кликнуть. Это будет начальная позиция, где появится враг, а также она будет ограничивать его траекторию (смотри рисунки, расположенные выше, когда мы говорили о типах врагов). Когда это сделано, появится диалоговое окно, в котором мы должны прописать тип врага. Не забывай, что в случае линейных врагов это будет значение от 1 до 4, где 4 относится к платформам в играх с боковым видом. Вводим номер и нажимаем ОК.

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

Вводимое значение соответствует количеству пикселей, на которое продвинется враг или платформа в каждой части игры. Чтобы не было проблем, это значение должно быть кратно двум. Например, 1, 2, 4, 8…. На самом деле, подходящие значения – это 1, 2 или 4. Больше будет слишком быстро и создаст различные проблемы. Значения, не кратные двум, также создадут проблемы. Если хочешь, можешь попробовать поставить 3 или что-нибудь еще, чтобы посмотреть, что произойдет, но я тебе гарантирую, что, скорее всего, в результате твои враги отправятся на рыбалку подальше от твоего игрового окна – или что похуже. Когда ты ввел значение, нажми ОК – и твой первый враг появится на карте.

colocador enem

Для остальных врагов (пока  поговорим о типах 5 или 7), тема немножко другая. Например, врагам пятого типа все равно, где ты их расположишь: они всегда появляются вне экрана (вспомни летучих мышей из Zombie Calavera, чтобы понять, о чем я говорю). Можешь обозначить начало и конец траектории, где хочешь. Скорость, которую ты пропишешь, тоже не будет принята в расчет. С врагами типа 7 (Mega Meghan) будет учтена только начальная позиция. Скорость и финальная позиция тоже будут полностью проигнорированы.

Когда мы в будущем перейдем к программированию в движке кастомизированного врага шестого типа, мы будем прописывать и начальную и финальную позицию, и скорость. Например, если можно выстрелить из пушки, то можно прописать направление, в котором она будет стрелять.  Но не будем забегать вперед. К тому же Dogmole не использует нелинейных врагов, не говоря уж о таких редких явлениях.

Можешь поставить трех врагов в каждом окне (программа не даст тебе прописать больше). Не обязательно ставить трех врагов в каждом окне, у тебя могут быть окна с одним или двумя врагами – или вообще без таковых.

Чтобы убрать или изменить значения размещенного врага, просто кликни на точку начала траектории (где прописан номер выбранного типа врага). После этого появится диалоговое окно, где можно изменить его тип, скорость или совсем его удалить.

Таким образом, мы начинаем потихоньку размещать наших врагов и платформы на карте, максимум три в каждом окне, помня, что не надо ставить большее значение типа врага, и не забывая, что скорость должна равняться 1, 2 или 4.

Размещаем хотспоты

Как говорили ранее, хотспот – это ячейка, где появляется ключ или предмет во время игры, и где может появиться дополнительная жизнь, если вернуться в это окно, после того как мы забрали тот самый ключ или предмет.

Если помните, мы говорили, что хотспоты разделяются на несколько видов. В Чуррера этот тип может быть 0 (неактивный), 1 (содержит предмет) или 2 (содержит ключ). Если ты считаешь себя крутым, ты можешь, конечно, изменить движок, чтобы их было больше, но в своем нынешнем виде Чуррера допускает только эти три типа.

Мы помним, что каждое окно может иметь только один хотспот. Это значит, что общее количество ключей и предметов, необходимых для завершения игры, не может быть больше общего количества игровых окон. Например, в Lala Prologue у нас 30 окон. Чтобы успешно завершить игру, нужно собрать 25 предметов, к тому же нужно открыть 4 замка, для чего нам нужно 4 ключа. Это значит, что в 25 из 30 окон расположен предмет, а в 4 – ключ. Отлично: используем 29 окон из 30. Важно запланировать это заранее. Если тебе приперло установить кучу замков, то может так случиться, что тебе не хватит места и на ключи, и на предметы, которые нужно собрать.

Также нужно убедиться, что ты разместил достаточно ключей,  чтобы открыть все замки, и что всегда есть возможность завершить игру, не оставшись у закрытой двери.  Так что лучше с этим без фанатизма, иначе можно получить несовместимую комбинацию замков и ключей, если по дороге будешь менять конфигурацию: в итоге игрок израсходует ключи на запланированной тобой дороге, а дальше пройти не сможет.

Чтобы разместить хотспот на открытом окне, просто кликаем правой кнопкой мыши в точке, где хотим разместить ключ или предмет. Появляется маленькое диалоговое окно, куда вводим тип. На картинке ниже показано расположение одного из трех ключей в Lala Prologue.

colocador hotspot

Понадобится много терпения, чтобы, окно за окном, располагать хотспоты, указывая тип 1, где должны появиться предметы, и тип 2, где будут ключи.

Генерация кода

Когда мы все уже расположили, как говорили раньше, мы должны создать код, используемый в Чуррера. Помнишь, суперскую таблицу значений, которую мы упоминали в начале главы? Это она. Когда закончил, нажми Е и сохрани код как enems.h. Скопируй этот файл в \dev. Если тебе любопытно, можешь открыть его в текстовом редакторе и посмотреть, сколько цифр тебе не пришлось писать вручную.

А теперь все!

С большим волнением, в следующем выпуске мы начнем в первый раз собирать нашу игру, пока, правда, без скриптов, чтобы увидеть, как у нас идут дела.

 

Перейти к Части 7

Перейти к Содержанию

 

[ Перевод на русский язык — сайт viva-games.ru. При перепечатке статьи или любой её части ссылка на viva-games.ru обязательна. Оригинал статьи тут. ]




Понравилась публикация? Поделись с друзьями

Поделиться
Subscribe
Уведомлять об
guest
0 комментариев
Inline Feedbacks
View all comments