Браузерный ремастер Fantasy World Dizzy (ZX Spectrum, 1989) — по русской расширенной версии для 128K. Логика игры перенесена с оригинала, а не написана заново по мотивам: физика, головоломки, поведение персонажей и звук взяты из самой игры.
Собирается в один самодостаточный HTML-файл и публикуется через GitHub Pages из
каталога docs/.
Физика — та же. Такт логики 12.5 Гц, целочисленная арифметика, те же таблицы прыжка и гравитации, тот же порядок проверок в главном цикле. Движок сверяется с эталонными трассами покадрово: расхождение на кадре сразу показывает, какая подпрограмма перенесена неверно.
Два режима отрисовки, переключаются клавишей R на лету:
- ZX — цвет по знакоместам 8×8, как на Spectrum: расцветка комнат воспроизведена вместе с тем, как объекты перекрашивают друг друга, накладываясь на одну клетку. Нужен как эталон сравнения;
- Ремастер — цвет принадлежит объекту, а не экрану: наложения больше не перекрашивают соседей. У персонажей тёмный контур, чтобы не сливались со светлым фоном; у Диззи красные перчатки и сапоги — единственный цвет во всей игре, которого нет в палитре Spectrum.
Знаменитого клэша, когда герой на ходу перекрашивается от фона, нет ни в одном режиме: Диззи рисуется своими цветами попиксельно и в сетку атрибутов не пишет. Это сознательное отступление от оригинала — ради него всё и затевалось.
Плавное движение при любой частоте монитора. Логика по-прежнему тикает 12.5 раз в секунду, но между тактами и Диззи, и актёры показываются в промежуточных положениях, с учётом собственного ритма каждого: крыса шагает через такт, лифт идёт с дробной скоростью, плот качается на волне — и качку, в отличие от движения, сглаживать нельзя, иначе она исчезает.
Звук из оригинального драйвера. Музыка и эффекты не переписаны нотами: сам драйвер прогнан в симуляторе, и с него сняты потоки регистров AY-3-8912 по кадрам. Порт чипа проверяется по эталонным сценариям, а не на слух.
Современный обвес. Рюкзак с иконками и подсказкой, что перед тобой;
диалоги отдельным окном; сохранения в localStorage; хардкор без сохранений,
но с автопродолжением; поддержка экранов высокой плотности.
Столкновения читаются из самой картинки. Проходимость нигде не задана таблицей: комната рисуется в буфер, и физика щупает его пиксели вместе с битом яркости атрибута — ровно как в оригинале. Поэтому лифт держит Диззи просто потому, что он нарисован, а не потому, что кто-то описал ему платформу.
Такт логики учащать нельзя. Физика совпадает с оригиналом только на своих 12.5 Гц: шаг ходьбы, дуга прыжка и пределы падения выражены целыми числами именно для этой частоты. Поэтому плавность даёт не более частый расчёт, а показ промежуточных положений между тактами — ломаная прыжка при этом воспроизводится точно, потому что внутри такта она и есть прямая.
Выключается отдельной клавишей (P): тогда видно, как игра шагала на самом
деле — по четыре пикселя двенадцать с половиной раз в секунду.
Служебные сочетания клавиш в игре есть. Какие именно — пусть останется на самостоятельное открытие.
← → или A D — идти, Space ↑ W — прыжок, E — взять или
применить, 1…4 — предмет из слота (коротко — применить, удержать —
выбросить). M — звук, - + — громкость, P — плавность, R —
отрисовка, F5 / F9 — быстрое сохранение и загрузка.
npm install
npm run dev # разработка
npm run build # docs/index.html — один файл, без внешних запросов
npm test # тесты движка, включая сверку с эталонными трассами
Все права на оригинальную игру Fantasy World Dizzy принадлежат их владельцам: игра создана The Oliver Twins и издана Codemasters в 1989 году. Русская расширенная версия — Dr. Titus, 2023.
Этот ремастер сделан исключительно в образовательных целях — как упражнение в разборе и переносе игровой логики — и не преследует коммерческих целей. Никакой связи с правообладателями не имеет и ими не одобрен. Собственный код проекта распространяется по лицензии MIT, данные и графика оригинальной игры под неё не подпадают — см. LICENSE.