Написал игру на ассемблере для Commodore 64

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

Написал игру на ассемблере для Commodore 64

Игра называется The Last Effort, а при создании я вдохновлялся небезызвестной Papers, Please. До ее уровня, конечно, далеко, но похожие механики присутствуют.

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

Поиграть в The Last Effort можно даже онлайн и даже на телефоне:

Сюжет, натянутый на геймплей

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

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

Написал игру на ассемблере для Commodore 64

Но есть одна проблема — жена Брауна умирает. На операцию требуется 15 тысяч долларов, но сидя в душном офисе и ломая глаза перед монитором, он не сможет заработать такую сумму. Поэтому Браун идет на преступление.

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

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

Механики из 80-х

На прохождение игры дается 99 часов, но время увеличивается не в реальном времени, а с каждой пропущенной машиной или после осмотра документов. У героя есть репутация (Fame), и она уменьшается, если делать ошибки или пропускать машины.

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

Написал игру на ассемблере для Commodore 64

У каждого водителя есть два документа: права и свидетельство о регистрации. Надо проверить каждый документ на легальность. Для этого надо изучить 8 полей (имя, номер, дата и т. д.) и сравнить их с данными в полицейской базе. Переключение между документами — клавиша C, а клавиша O открывает базу данных.

Написал игру на ассемблере для Commodore 64

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

Написал игру на ассемблере для Commodore 64

В этот момент надо принять какое-то решение. Можно отпустить водителя (L), а можно наложить на него штраф (F). Если решение верное, то Брауну заплатят 100 долларов, а его репутация повысится на 6 пунктов. И наоборот, если допустить ошибку, то деньги взыщут, а репутация понизится.

Но есть и третий вариант — попросить взятку (B). В этом случае надо сыграть в простенькую мини-игру.

Написал игру на ассемблере для Commodore 64

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

При проигрыше репутация уменьшается на 12 пунктов, а при выборе правильного варианта в кошелек падает 200 долларов.

Когда репутация понизится до нуля, или истечет отведенное время, то игра закончится поражением или победой.

Не все так гладко

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

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

Написал игру на ассемблере для Commodore 64

Немного статистики

2 487 строк
занимает код на ассемблере
7 095 байт
или 6,92 Кб занимает игра вместе с кодом программы и ресурсами
0
рублей потрачено на разработку и рекламу
не предел

P. S. Я веду Телеграм канал, в котором пишу про свой опыт программирования. В последнее время практически полностью переключился на Commodore 64, но иногда там выходят заметки и про другие вещи: попытки в 3D моделирование, Godot Engine, пиво. Буду рад новым участникам=)

216216
70 комментариев

Лайк не глядя чисто за ебейшие усилия )

23

Спасибо, это действительно было не просто)

12

"Поэтому пока что спасать жену офицера приходится в полной тишине" ... полноценный стелс-экшен 🤘🏻

5

Не баг, а фича)

3

Даже на этом этапе это очень круто, пусть без музыки или хитрых механик. Такие материалы возрождают веру в ресурс!

На телегу подписываюсь :)

4