Чуррера обновилась, и наши друзья из 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. Посмотри, как выглядит тайл амуниции:
Улучшения для врагов 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 не помещалась в памяти, ну ни за что. Так что крутяк, чувак!
Как обновиться?
Это не сложно и не утомительно, но в любом случае возьми папку, как она есть, и зазипуй ее архивную копию, так ну чисто на всякий случай. Когда все сделал, выполни следующие простые шаги:
- Поменяй название папки твоей игры – ну не знаю, напиши «-old» в конце.
- Подготовь новую папку так же, как делал раньше, т.е. разархивируй ее, поменяй название папки игры, поменяй название /dev/churromain.c и script/churromain.spt на название твоей игры и измени make.bat, поменяв %1 на название твоей игры. Все точно так же, как раньше.
- Скопируй графику, карты и архивы врагов из твоей старой папки в новую, т.е. все, что находится в gfx/, /map и /enems
- Снова измени config.h – надо открыть новый и старый /dev/config.h и сделать в новом все, так же как и в старом. Обрати внимание на новые характеристики: поставь комментарий к тем, которые тебе не нужны или попробуй их поиспользовать, или что тебя больше вставляет.
- Снова скопируй архивы твоей игры из старой папки /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. На заставке этой статьи изображено испанское печенье под названием “Чуррос”.
[ Перевод на русский язык — сайт viva-games.ru. При перепечатке статьи или любой её части ссылка на viva-games.ru обязательна. Оригинал статьи тут. ]
Понравилась публикация? Поделись с друзьями