Pepe's Day Out: болтовня и дневник разработки

Woot! #07
+=============================================+
|  PEPE'S DAY OUT  - for WOOT! Tape Magazine  |
|   A very triggering game for 48K Spectrum   |
| dredged from the pages of Sinclair Programs |
| & modded by Jim Waterman, 5-8 December 2023 |
+=============================================+

Болтовня

Это очень дешёвая и мерзкая игра, сляпанная за четыре дня для WOOT! 2023. Хотя по качеству это чистый CSSCGC, я не могу выставить её на конкурс, поскольку это мод существующей игры — а именно Frogger (ну разумеется!) от Andrew Pennell из номера Sinclair Programs за январь/февраль 1983 года. Эту вещь я уже дорабатывал, когда мне было едва десять лет, но текущая переделка куда более основательная и представляет собой вариацию на тему Frogger, до которой, к моему удивлению, никто раньше не додумался (по крайней мере, насколько мне известно).

Вообще-то, источник вдохновения для создания CSSCGC как такового — сборник Cassette 50 — содержал в себе Frogger, ранее публиковавшийся в виде листинга (под странным названием Spectrum Cross) и сброшенный на кассету оптом, без каких-либо изменений. Так что, возможно, заявить эту игру на CSSCGC было бы не такой уж и натяжкой? Ну что ж, не повезло, Bizzel. Уверен, ты переживёшь, тем более что твой срок в качестве ведущего к моменту этого релиза уже закончится!

Кроме того, интересно, кто потратил на эту игру больше времени: Andrew Pennell, создавая оригинал на резиновом Spectrum без дополнительных инструментов вроде BASin или эмуляторов с сохранением снепшотов, или я, возясь с его 7 КБ Бейсика, чтобы раздуть его почти вдвое (чуть более 13 КБ, если сложить BASIC и машинный код)? Вызываю доктора Emmett Brown, мне нужна ваша машина времени...

И ещё: я снимаю с себя всякую ответственность за любую реакцию на эту игру.
«Жизнь сурова. Купи себе шлем». — Candace Owens

Дневник разработки

4 декабря 2023:
v0.1: Взял свой мод игры Frogger от Andrew Pennell (см. здесь: https://www.rickdangerous.co.uk/zx/typeinsplus.html) — начал с перестановки DATA для препятствий, чтобы всё это можно было сохранить как блок CODE вместе с UDG, будущим кастомным набором символов (он мне понадобится!) и простейшим машинным кодом.
v0.2: Убрал процедуру заполнения массива A$ и процедуру, которая использует A$ для заполнения P$ (960 байт) — взял содержимое P$, превратил в DATA, и теперь это копируется по LDIR на место; P$ объявляется раньше всего остального, поэтому данные всегда начинаются с (VARS)+8.
v0.3: Добавил набор символов «Manic» от Damien Guard. Несколькими символами придётся пожертвовать ради дополнительных UDG.
v0.4: Множество косметических улучшений. Основательно переработал DATA для массива P$, чтобы можно было легко менять цвета (все они задаются управляющими символами: CHR$ 17 для PAPER и CHR$ 16 для INK в массиве символов). Перенёс (новое) лицо Pepe (из Illuminati II) в набор символов и переопределил UDG HIKL под кузова грузовиков.
Потребовалось добавить пару дополнительных переменных и подправить проверку ATTR, чтобы убедиться, что определение столкновений и перемещение лягушки на брёвнах и черепахах по-прежнему работают.
На этом этапе игра всё ещё узнаваемо остаётся Frogger — пока лягушка не повернётся в другую сторону.

5 декабря 2023:
v0.5: Официально повысил версию до Pepe's Day Out — лягушка теперь стартует с одной конкретной кувшинки, а цель находится внизу экрана (Y=19). Обнаружил, что за каждый сделанный шаг должно было начисляться 5 очков, что мой мод примерно 1989 года упустил (из-за проверки не той клавиши!). Теперь это исправлено.
v0.6: Добавил подпрограммы и массивы для всех четырёх лягушек, стартующих в случайном порядке и со случайных позиций (хотя имена всегда привязаны к одним и тем же цветам). Пришлось изрядно повозиться, чтобы всё заработало как надо. Кроме того, теперь даётся всего одна жизнь — так играть гораздо легче, так что раздавите одну из лягушек, и игра сразу окончена!
v0.7: Добавил второй набор UDG для титульного экрана, LDIR для переключения между ними и подпрограмму скроллинга экрана вверх на одну строку от Hewson из готовящегося к переизданию сборника «40 Best Machine Code Routines» — правда, я зациклил её четыре раза, чтобы текст названия встал на нужное место. Добавил титульный экран и краткие инструкции (ну, это же всё-таки Frogger, верно? Сами знаете, что делать...).

6 декабря 2023:
v0.8: PRINT VAL$ Q$ начал выдавать ошибку 4 Out of memory (при наличии 13К свободного места, судя по всему!). Поэтому перешёл на SZX-снапшот с подключённым microdrive, чтобы подгружать код извне. Удалил строки с определениями кода (целых 14К!), добавил дополнительный код для экранов «Feels Good/Bad Man!» и сами эти экраны. Улучшил титульную страницу, внёс ещё несколько косметических изменений в игру.

7 декабря 2023:
v0.9: Ноты для «Shadilay» найдены по адресу: https://musescore.com/jezi_fay/scores/4222466
Флейта звучит в той же тональности, что и в оригинале от P.E.P.E., только сдвинута на две октавы вверх. Это была отличная возможность снова пустить в ход мой простенький BEEP-секвенсер на машинном коде. «Shadilay» была разбита на две части, так что при успешной переправе лягушки проигрываются только первые шесть нот; мелодия играет дольше, если переправились все четыре лягушки.
v0.10: Перевёл управление на «универсальную систему управления» на машинном коде, которую разработал ранее, но так нигде и не использовал — она должна была поддерживать QAOPM/Space, оба порта Sinclair, Kempston и Fuller, чтобы все они могли работать одновременно, проверяя при этом, подключены ли интерфейсы Kempston и Fuller (путём проверки бита, значение которого всегда отличается, если они не подключены). Однако ничего не заработало! Что-то вызывало помехи, и лягушки периодически двигались вверх и вниз сами по себе, без какого-либо ввода. Придётся переписать всё в виде единой подпрограммы и вручную делать POKE нужных значений IN из меню управления. А ведь мне так хотелось этого избежать. (Но, полагаю, можно сделать и вариант с Cursor...)

8 декабря 2023 г.:
v0.11: Написал новую подпрограмму в машинном коде, которая потребовала добавить меню выбора управления, зато появилась возможность играть на курсорных клавишах (для мазохистов). Это также гарантирует отсутствие помех от отключенных интерфейсов джойстика.
v0.12: Добавил дополнительный вступительный экран, причесал остальную часть листинга.
v0.13: Подготовил листинг для создания ленточной версии.
v0.14: Внес последние несколько правок. Или мне так казалось...
v0.15: ...потому что, с учетом того, что всё остальное теперь исправлено, игра ТАКАЯ МЕДЛЕННАЯ! Но ведь оригинал таким не был? В v0.14 на сброс таймера до нуля уходило 2 мин. 39 сек.; если подправить оригинал до 111 единиц времени (как в v0.14; в оригинале было 120), на это уходит 2 мин. 17 сек. Но избавление от пяти вызовов VAL$ (на обработку которых уходит ОГРОМНОЕ количество памяти...) и применение исправления для 16K-моделей из более поздней Errors And Mishaps вкупе с небольшой дальнейшей оптимизацией ускоряют игру так, что таймер отрабатывает «всего» за 2 мин. 06 сек. Жертва малоиспользуемой VAL$ определенно того стоила.
v1.0: Наконец-то сделал кассетную версию — в комплекте с загрузчиком и ATTR-only экраном (с фрагментом машинного кода, хитро спрятанным в REM загрузчика для создания штрихованного узора).
Смеха ради сделал еще и версию для Microdrive.

Поделитесь вашим мнением о статье