Тесные холодные тоннели остались далеко позади. Впереди — лишь нехоженые тропы, тёплое солнце да старые брошенные лачуги. Мирно шелестит листва на ветру, качаются деревья, а солнце тем временем понемногу клонится к горизонту... Стоп, что? 😦
Работа над крупной секцией подземных катакомб завершена. Настало время побродить немного на свежем воздухе и потрогать траву.
Этот уровень будет более открытый, однако выдыхать рано: кто-то следует по нашим пятам и подозрительно шуршит кустами... неужели мы скоро обнаружим свежую порцию записок? 🤔
Если заинтересовались - милости прошу к нашему шалашу:
Юрий Мирошников и Николай Барышников вспоминают, как зарождались культовые серии вроде King’s Bounty, Ил-2 Штурмовик, В тылу врага и «Космических рейнджеров», почему многие студии уходили в онлайн, как формировался реестр IP и почему рынок интеллектуальной собственности стал совсем другим.
Мы обсуждаем, как в Польше вырос QLOC, что происходило с локализацией и дистрибуцией в 2000-х, почему ретрошутеры снова в моде и что именно Tencent получила в результате сделки.
Работу над Аллеей мы начали с концепта, где определили настроение и общее направление атмосферы будущей карты. Далее мы создали блок-аут — выстроили игровую схему, маршруты и ключевые точки взаимодействия. На этом этапе важно было логически связать все уровни и переходы, чтобы локация чувствовалась живой и понятной в геймплее.
Когда структура была готова, мы перешли к оверпейнту — обрисовке поверх блокаута, которая помогает выстраивать визуальную часть, не теряя функциональности уровня. Такой подход позволяет заранее видеть, как свет, материалы и композиция работают в пространстве, и при этом сохранять баланс между выразительным стилем и удобством для игрока.
Дальше оверпейнт становится ориентиром для 3D-художников и левел-артистов: он подсказывает, какие материалы использовать, где расставлять акценты и как распределять свет. В Glide BTL мы стараемся, чтобы каждое визуальное решение поддерживало геймплей, поэтому арт и дизайн идут рука об руку на всех этапах разработки.
Я закончил работу над последним зелёным биомом — теперь в нём полно жизни и опасностей. Добавил свежую траву, густые папоротники, камни и смертельно опасные шипы.
Но самое главное — огромный колючий стебель, который стал символом этого биома. Он не просто украшение… лучше не подходить слишком близко
Давно, когда я еще учился в школе, зимним вечером, пройдя очередной уровень марио я загорелся идеей - сделать свой платформер для игровой приставки.
Примерно через полгода у меня появился персональный компьютер с операционной системой MS-DOS и средой программирования QBasic:
QBasic
Ну вот! Подумал я, настал мой час и сел писать игру в надежде что как-то придумаю как запихнуть эту игру потом в приставку денди.
Наивно, но тогда не было интернета и узнать, как вообще создавать игры и заливать их на картридж было довольно сложно.
Понятное дело, после некоторых попыток у меня толком ничего не вышло.
Да, у меня получилось сделать какой-то фон, персонажа и даже заставить его двигаться и на этом разработка игры была закончена.
Прошло почти 25 лет, у всех стало модно закрывать какие-то свои гештальты, решил закрыть и я.
Для начала нужно было ознакомиться с платформой и ее особенностями, а их как оказалось довольно много, как и у всей ретро-техники.
Железо
Знакомиться с платформой я начал буквально с "кишков микросхем, заказав плату, изучив схему и собрав это все чудо из рассыпухи, благо опыт работы с паяльником довольно неплохой.
Готовая приставка
Что мы имеем:
CPU - UA6527P/UA6527, Клон популярного в свое время 8-битного процессора 6502.
PPU - 6538/6528, Видеочип, аналог видеокарты.
RAM - 62256, 2 Кбайт оперативной памяти, которые позволяют использовать горизонтальный или вертикальный скролл по очереди, было бы 4 Кб можно было бы в теории и одновременно.
Звук - 2 прямоугольных канала, 1 треугольный, 1 шумовой и цифровой канал. Да-да, примитивная звуковая карта уже в те времена.
Микросхемы приставки
Разрешение экрана 256х240 и 54 цвета (Есть цвет чернее черного и еще некоторые цвета, которые лучше не использовать для избежания глюков на разных телевизорах).
Приставка Dendy она же NES
Инструментарий
Писать код для приставки можно на двух языках: на ассемблере и си.
Я решил использовать си для короткого и удобного вида кода, но некоторые вставки ассемблерного кода пришлось писать с нуля (так как скорости процессора в 5,37 МГц всегда не хватало).
Для компиляции кода я использовал компилятор cc65, с опцией --add-source (добавляет ассемблерный код, в котором уже можно найти не очевидные косяки).
Для графики, кроме фотошопа использовал программу YY-CHR:
YY-CHR
Для распиливания рома на прошивку, программу NRM.
Для статичных фонов есть очень удобная программа NES Screen Tool, которая позволяет нарисовать и выгрузить экран в массив байтов. Бонусом этом массив можно еще сжать RLE сжатием.
Для написания музыки и звуков я использовал FamiTracker и библиотеку FamiTone2.
Для создания уровней Tiled + самописный конвертер в встроенный формат карты.
Для схемы картриджа Sprint layout.
Для отладки лучше всего подходит эмулятор FCEUX:
FCEUX
Код игры
Но самая попаболь проблема, была в том, что я решил делать платформер а не статичную игру.
Сразу загрузить массив байтов на экран нельзя, потому что длинна уровня может быть от 3 до 256 экранов в длину.
Видеочип за один кадр успевает загрузить только 2 ряда блоков по 8 пикселей.
Еще за этот кадр нужно успеть прочитать состояние джойстиков, проиграть такт музыки, обработать коллизии, передвинуть спрайты на экране и т.п.
Для оптимизации я разработал такую структуру уровня. Где экран разбит на поле 16х16:
const unsigned char LEVEL1[] = {
...
0x75,
2,
ID_OBJECT,
...
};
Первый байт — координаты на экране x = 7, y = 5.
Второй байт — номер экрана уровня.
Третий байт — идентификатор объекта.
Структура объектов в игре
У каждого объекта есть атрибут коллизии, может игрок пройти через него или нет. На основе этих атрибутов строиться карта коллизии уровня.
unsigned char COLLISION[64];
Первые 32 байта, это первый экран NAMETABLE, вторые 32 байта для второго экрана NAMETABLE экрана.
Каждый бит, может быть, 0 если игрок может пройти и 1 если стена.
В итоге получаем два поля по 16х16 бит = 32+32 байта.
Картридж
Я не особо хороший художник, рисовать графику, уровни, спрайты, когда у тебя всего 4 цвета на плитку, уходит уж очень много времени.
Вид игры в эмуляторе
Было решено упростить задачу и запихать все в один банк памяти.
Это позволяет использовать картридж без маппера и не писать дополнительный код, который переключает эти банки.
Из приставки можно реально выжать намного больше и красивее, но по трудозатратам эта игра будет на уровне современной игры с красивой графикой, стоит ли оно того?
Возможно, кто-то захочет этим заняться, и я поделюсь с ним своими наработками.
В итоге схемотехника картриджа сводиться к плате с 2мя микросхемами памяти, у которой нужно просто подключить ноги к шине данных картриджа.
Схема в Sprint layout
Можно было бы, конечно, заказать у китайцев картриджи на каплях или флэш-памяти, но я хотел именно винтажного вида картриджа на DIP микросхемах (такие раньше попадались только в старых или дорогих картриджах)
Сами микросхемы найти не составило проблем, сначала я развел схему под w27c512, но как оказалось более объемная память w27c010 стоит дешевле и найти ее еще проще.
После того как пришли платы, я подготовил прошивку через NRM, прошил микросхемы в программаторе XGECU T48 и впаял их на место.
Готовый картридж для Денди
Распространение
Как продвигать игру, продавать картриджи и как их распространять: большой вопрос.
Также спрос на такие игры небольшой, даже если спрос и будет, то большую партию картриджей просто невозможно будет спаять.
Я крайне доволен своей работой, выпустить игру на физическом носителе для приставки 40-летней давности довольно крутая ачивка для разработчика игр.
Продолжаю разработку своей игры. Здесь персонаж спускается в кромешную тьму, где освещать себе путь можно будет только с помощью телепорта. Как это работает: — каждая телепортация создает вспышку, которая позволяет увидеть все вокруг; — телепорт переносит персонажа на ~2 метра в любую сторону; — можно преодолевать различные препятствия, но если телепортироваться прямо в твёрдый объект или в стену, то персонажа разорвет на части; — каждая вспышка телепорта может привлекать чье-то внимание.