Создай свою игру на ZX Spectrum. Часть 7b – Небольшое отступление

Чуррера обновилась, и наши друзья из Mojon Twins решили написать главу 7b, чтобы объяснить произошедшие изменения. Теперь у нас еще больше возможностей (если это вообще возможно) для нашей игры в Спектруме. Наслаждаемся!

Чуррера 3.99.1

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

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

Но что же это?

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

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

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

Все готовы? Ну, начнём разговор про то, что появилось нового.

Что нового?

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

Разрушаемые тайлы

Для начала (пока что) для игр, использующих выстрелы, мы создали новый тип тайлов, под номером 16. Эти тайлы разрушаются и исчезают (заменяются на тайл с номером 0) после того, как в них попадают пули (количество необходимых выстрелов прописывается отдельно). Чтобы их включить в дополнение к 16-ым тайлам, мы должны отконфигурировать кое-что в config.h:

#define BREAKABLE_WALLS // Breakable walls – стены, которые ломаются
#define BREAKABLE_WALLS_LIFE 1 // Amount of hits to break wall – количество выстрелов, чтобы сломать стену

Первая команда, BREAKABLE_WALLS, активирует это свойство и добавляет весь код, необходимый для появления разрушаемых тайлов (если ее не активируешь, потому что у тебя и так есть тайлы 16-го типа, ничего не случится). Вторая команда, BREAKABLE_WALLS_LIFE, определяет количество выстрелов, необходимое для разрушения тайла. Конечно, нужно написать число, большее, чем 0. Если поставишь 3, тайл разрушится после третьего попавшего в цель выстрела.

Типы комбинируемых тайлов

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

В принципе, речь идет о комбинировании типов тайлов, чтобы один тайл был одновременно, например, и убивающей платформой, и препятствием, которое можно разрушить. Чтобы комбинировать типы тайлов, нужно просто суммировать типы, которые мы собираемся соединить. Отсюда и дыры в нумерации.

Например, чтобы создать разрушаемое препятствие, нужно чтобы этот тайл имел тип препятствия (8) и тип разрушаемости (16), таким образом, 8+16=24. В последней созданной нами игре, Sgt. Helmet, есть электрические заграждения (которые убивают), которые можно разрушить. Если ты посмотришь на код игры (должен бы, ты же теперь настоящий чуррос,… то есть разработчик!) и посмотришь на часть, посвящённую типам тайлов (behaviours) в конце config.h, увидишь, что тайл электрического забора имеет тип 17, т.е. убивающий (1) и разрушаемый (16): 16+1=17

Есть куча тупых и не имеющих смысла комбинаций, как, например, создать убивающее препятствие (8+1=9). На самом деле, как раз одну из этих тупых и невозможных комбинаций мы использовали для специальных тайлов (передвигаемые блоки и замки) с типом 10 (8+2, т.е. препятствие, которое тебя прячет).

Движок продолжает также работать и с простыми тайлами (1, 2, 4 и 8), так что в Dogmole или твоей собственной игре можешь ничего и не менять.

Заканчивающиеся пули

Теперь ты можешь создать заканчивающиеся пули. К тому же можешь размещать дополнительные пули в игре. Для этого, прежде всего, открываем config.h, чтобы активировать и отконфигурировать эту возможность:

#define MAX_AMMO 99 // If defined, ammo is not infinite! – Если определено, патроны не бесконечны!
#define AMMO_REFILL 50 // type 3 hotspots refill amo, using tile 20 – Хотспоты типа 3 перезаряжают патроны, используется плитка 20
//#define INITIAL_AMMO 0 // If defined, ammo = X when entering game. – Если задано, количество патронов = X при входе в игру.

Первая команда, MAX_AMMO, если включена, делает так, что пули заканчиваются, и их максимальное количество будет равняться прописанному. Если тебе нужно неограниченное количество пуль, просто поставь комментарий к этой команде. Следующая команда, AMMO_REFILL, определяет, сколько добавляется пуль, когда мы собираем дополнительное вооружение. Третья, INITIAL_AMMO, если включена, делает так, чтобы в начале игры мы имели определённое здесь количество пуль. Если опция не включена, количество пуль в начале игры будет максимальным, т.е. равным прописанному в MAX_AMMO.

Как видно здесь (это конфигурация Sgt. Helmet), максимум пуль равен 99, при сборе амуниции получаем по 50 пуль, а игра начинается с максимальным количеством, т.е. 99.

Чтобы расположить пули, поработаем с Разместителем и будем использовать хотспоты. До сегодняшнего дня нам приходилось использовать хотспоты первого типа для предметов и второго типа для ключей. Чтобы расположить амуницию, нам потребуются хотспоты 4-го типа. Соответственно, в нашем тайлсете тайл под номером 20 должен соответствовать амуниции. Вот тайлсет Sgt. Helmet. Посмотри, как выглядит тайл амуниции:

tileset-helmet

Улучшения для врагов 7-го типа

Мы также добавили пару вещиц для врагов 7-го типа. Раньше враги 7-го типа появлялись в определенном тобой в Разместителе месте и преследовали тебя. Соответствующая графика выбиралась наугад между 4 возможными типами спрайтсетов. Теперь у тебя есть возможность выбрать самому графику, раз и навсегда. К тому же эти враги раньше не могли проходить через препятствия (тайлы 8-го типа). Сейчас же мы можем прописать, что любой тайл, не являющийся непроходимым (тип 0), задерживает их. Это сделано, например, в Sgt. Helmet, чтобы их задерживали, в том числе, и электрические заграждения (которые не относятся к 8 типу). Все это подчиняется двум новым командам в config.h:

#define TYPE_7_FIXED_SPRITE 4 // If defined, type 7 enemies are always 4 – Если задано, враги типа 7 всегда 4
#define EVERYTHING_IS_A_WALL // If defined, any tile <> type 0 is a wall. – Если задано, любая плитка <> 0 является стеной

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

Детали движка скриптов

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

Исправления и улучшения

Мы к тому же полностью переписали часть движка, которая управляла выстрелами, чтобы теперь столкновение было более точным и занимало меньше места. Мы также разобрались с некоторыми багами и поменяли некоторые части кода, еще больше оптимизировав его работу. До этой оптимизации игра Sgt. Helmet не помещалась в памяти, ну ни за что. Так что крутяк, чувак!

Как обновиться?

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

  1. Поменяй название папки твоей игры – ну не знаю, напиши «-old» в конце.
  2. Подготовь новую папку так же, как делал раньше, т.е. разархивируй ее, поменяй название папки игры, поменяй название /dev/churromain.c и script/churromain.spt на название твоей игры и измени make.bat, поменяв %1 на название твоей игры. Все точно так же, как раньше.
  3. Скопируй графику, карты и архивы врагов из твоей старой папки в новую, т.е. все, что находится в gfx//map и /enems
  4. Снова измени config.h – надо открыть новый и старый /dev/config.h и сделать в новом все, так же как и в старом. Обрати внимание на новые характеристики: поставь комментарий к тем, которые тебе не нужны или попробуй их поиспользовать, или что тебя больше вставляет.
  5. Снова скопируй архивы твоей игры из старой папки /dev в новую. То есть: tileset.h, spriteset.h, title.bin, marco.bin (если используешь), ending.bin, mapa.h и enems.h

И всё. Теперь только надо проверить, что все сделано правильно: открываешь командную строку и выполняешь make.bat… Если не работает, проверь все шаги.

И в следующий раз перейдем к нашим любимым скриптам. А пока ждешь, можешь поиграть в Sgt. Helmet!

ОБЪЯВЛЕНИЕ

Благодаря Fabio Didone, который следит за нашим семинаром и создает свою собственную игру, мы сообразили, что в последней версии Чуррера оказался небольшой баг, который нарушает работу команды ONLY_ONE_OBJECT. Мы обновили пакет 3.99.1, исправив ошибку. Теперь можно загрузить новый архив по традиционной ссылке:

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

Если вы уже начали делать вашу игру, вам не придется заново все собирать. Достаточно прописать mainloop.h в новой версии, включенной в эту папку.

P.S. На заставке этой статьи изображено испанское печенье под названием “Чуррос”.

 

Перейти к Главе 7c

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

 

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




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

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