Девять месяцев ассемблера или как я все еще пишу игру на Commodore 64...

Начнем с позитива

Я написал практически весь игровой код. Осталось только вылавливать баги и, возможно, внедрять что-то новое.

Более того, я уже выставил первую версию игры на всеобщее обозрение, и скачать ее можно вот здесь:

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

Для игры потребуется либо реальное железо с эмулятором дисковода (например, SD2IEC) или программный эмулятор (конечно же это VICE Emulator). Просто запускаем VICE и выбираем File-Smart attach...-Autostart. Сразу предупрежу, что игры на Commodore 64 грузятся очень долго. Для таких случаев в левом нижнем углу эмулятора есть кнопка Warp, которая ускоряет работу процессора в 10 раз.

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

Девять месяцев ассемблера или как я все еще пишу игру на Commodore 64...

Исследование

Карты небольшие - всего 24*24 блока, но я постарался забить их под завязку с учетом ограничений. Например, на одной карте нельзя разместить более 32 объектов (патроны, ключи и прочее). А еще максимум 96 триггеров отвечают за всю логику карты (двери, кнопки, подбор предметов и т.д.)

Ограничения пришлось ввести из-за небольшого размера памяти дискеты (166 Кб) и самого компьютера (64 Кб), но даже при таком раскладе размер одной карты составляет чуть больше 7 Кб.

Карты я рисую в Tiled, и пришлось написать скрипт для переноса данных на язык ассемблера.

Девять месяцев ассемблера или как я все еще пишу игру на Commodore 64...

В исследовании мира помогает компас в текстовой зоне, а также мини-карта, которая открывается на клавишу M. Ее можно перемещать, но отображаться будут только те блоки, которые игрок уже видел. Более того, не будут видны принудительно закрытые блоки.

Девять месяцев ассемблера или как я все еще пишу игру на Commodore 64...

Битвы и ролевая система

Битвы случайные с вероятностью в 7% на каждый ход. На одну карту заготовлено 4 уникальных противника. При этом я стараюсь соблюсти баланс и сделать их не слишком сложными и не слишком сильными для игрока.

Девять месяцев ассемблера или как я все еще пишу игру на Commodore 64...

Ролевая система очень простая. И у игрока и у врагов есть всего 4 параметра: Attack, Defence, Dexterity и Accuracy. Последние два отвечают за вероятность промаха. Чем больше Accuracy у игрока и чем меньше Dexterity у врага, тем больше шанс по врагу попасть.

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

Есть и нюансы. Игрок, например, может атаковать, защититься (Defence X2) и уклониться (Dexterity X2). У врага опций больше. Он может совершить сильную атаку (Attack X4) и аккуратную атаку (Accuracy X4). Из-за этого игрок должен делать выбор: рисковать, защищаться или уклоняться.

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

А еще все это сопровождается вот такими олдскульными эффектами:

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

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

А еще можно сбежать с поля боя с вероятностью 1/3. И это полезно в самом крайнем случае. Опыта за такое не дают, а враги на следующей карте будут крайне рады слабому игроку. Не стоит забывать и про боссов, от которых сбежать не получится (и которые еще не сделаны, если честно).

Лечение

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

Сохранение и загрузка

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

Было несколько вариантов:

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

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

Ускорил в 10 раз

Музыка и звуки

А их нет. Я только начал разбираться, как устроен звуковой чип (SID), но для меня это пока что темный лес. Я не музыкант, и никогда им не стану. Поэтому надеюсь на помощь товарищей-музыкантов и пытаюсь искать единомышленников. Без звуков игра будет неполноценной, поэтому заняться этим определенно надо.

Сторонний софт

Софта для разработки игр на Commodore 64 просто дофига.

Код я пишу в CBM prj Studio, но не могу посоветовать. Лучше взять обычный VS Code и скачать один из кучи плагинов для разработки под процессор MOS 6502.

Для тайловой графики и спрайтов можно обратиться к этому сайту:

Графику в режиме BitMap можно рисовать в программе Multipaint

Для музыки и звуков есть много трекеров. Я лично положил глаз на SID Factory II.

Но было бы все так просто...

Проприетарный софт

Мне пришлось написать две программы.

Первая программа для отрисовки попиксельной графики в режиме Multicolor. Дело в том, что Multipaint распределяет цвета по памяти в соответствии с каким-то своим алгоритмом. Мне нужно было, чтобы я мог выбирать все 3 цвета для каждого знакоместа вручную. Эту штуку я написал на Python, и она получилась очень тормознутой, но для моих целей хватает. Она позволяет переносить данные в формат ассемблера и сохранять .png файлы.

Девять месяцев ассемблера или как я все еще пишу игру на Commodore 64...

Вторую программу я написал для отрисовки объектов на уровне. Дело в том, что каждый объект в игре состоит из четырех аппаратных спрайтов Commodore 64, и надо было эти спрайты как-то совместить, чтобы не рисовать их по-отдельности. Я нашел одну программу, которая позволяет сделать такое, но она продается только на itch.io, а в России заплатить я не могу.
Написал я программу на движке Godot, и она также умеет конвертировать изображение в ASM код.

Девять месяцев ассемблера или как я все еще пишу игру на Commodore 64...

И конечно было написано еще много скриптов, которые облегчают жизнь.

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

That's all Folks

Сейчас я занимаюсь тем, что рисую, рисую и еще раз рисую. Уровни, текстуры, врагов, объекты. Из всего этого когда-нибудь, я надеюсь, выйдет полноценная игра.

Особняком стоит звуковое сопровождение. Я даже не знаю, как к этому вопросу правильно подступиться. Но что-нибудь придумаем.

А еще я веду Telegram канал, в котором рассказываю про разработку этой игры. Но там еще много интересного. Например, недавно я купил советский компьютер "Микроша" и даже написал на нем программу для отображения тайловой графики.

9292
77
22
53 комментария

Ебать ты мощный. Без негатива, чистый респект. Это реально мощно

10

Респект, коллега! Это мы уважаем 🙂. Я сам тоже занимаюсь ретро-геймдевом, правда не под Commodore 64, а под Sega MD.

4

Кстати, а не было опыта что-нибудь сделать с железом?
У меня просто есть мечта собрать собственную ретро-консоль на каком-нибудь 6502 или Z80, но с моими текущими знаниями это практически нереально. Вот ищу людей, у которых есть такой опыт, чтобы его перенять)

2

О, интересно! А есть что посмотреть?)

Зачем если можно попросить чат гпт?

2

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

6