Files
Sprinter-SDCC/applications/PoP/roomtest
Александр Петров a89b8b30c6 docs: BUG-DRAWORDER-1 закрыт; остаток «ноги поверх головы» — в НЕ БАГИ
Сверено в SDLPoP: Кид, стоящий колонкой правее лежащего трупа, и там
рисуется поверх его головы.  Значит порт верен, а артефакт врождённый:
set_objtile_at_char приписывает персонажа РОВНО ОДНОМУ тайлу, ширина
спрайта на выбор тайла не влияет, и всё, что стоит правее, перекрывает
выступающую часть тела.  Механизма «широкий объект в нескольких тайлах» в
оригинале нет — сверено с draw_objtable_items_at_tile, sort_curr_objs и
веткой tile_object_redraw == 0xFF (та про оверлеи пола).

Закрытая запись перечисляет все четыре корня, которые пришлось снять по
очереди: порядок по роли вместо тайла; своя регрессия с общим окном
fore-клипа; колонка трупа из тайла вместо X; непортированная ветка
actions_1_run_jump.  Записано и то, как отличать остаток от этих багов,
и цена «починки» остатка (тайл по центру габарита = отход от эталона).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 23:02:02 +03:00
..

roomtest

Живой прототип порта Prince of Persia: комната 1 уровня 1 отрисовывается реальной композицией слоёв-тайлов, по ней бегает и прыгает Kid под управлением с клавиатуры. Служит стендом для переноса механик движка (анимация, коллизия, падение, зацеп, окклюзия, проваливающиеся полы) до их выделения в переиспользуемый код.

Правила разработки и порядок слоёв рендера — CLAUDE.md.

Быстрый старт

make        # собрать roomtest.exe (ассеты упакуются автоматически)
make run    # собрать, упаковать на дискету и запустить в MAME

Клавиши в запущенном тесте: ←/→ бег, ↓ присед, ↑+→ прыжок, Shift шаг, ESC выход.

Отладка рисования:

  • SPACE — тумблер дабл-буфера (в однобуфере баги рисования видны без мерцания-через-кадр).
  • 1 — заморозить кадр (frozen: tick/draw/flip пропускаются, картинка стоит), 2 — снять заморозку и продолжить. Приём для разбора транзиентных артефактов (тряска/падение loose, поза Kid): поймать проблемный кадр на 1, спокойно рассмотреть/снять пиксели — в т.ч. удалённо из MAME MCP-моста, пока анимация стоит.

Эталон вида комнаты — ../toolchain/1.1-2.png.

Модули

  • roomtest.c — главный цикл (дабл-буфер, порядок tick/draw).
  • pop_bg.c — фон комнаты композицией тайлов + fore-окклюзия + loose-полы.
  • pop_kid.c — анимация/движение Kid (интерпретатор seqtbl).
  • pop_ctrl.c — управление с клавиатуры (диспетчер control).
  • pop_map.c — коллизия с картой, физика падения, loose-полы.
  • room1_data.h — карта комнаты 1; kid_data.h — данные анимации Kid (оба генерируются скриптами ../toolchain/).

Статус (2026-08-01)

Играется весь уровень 1: комнаты и переходы между ними, Kid (анимация, управление, коллизия/падение, зацеп/подтягивание/спуск, окклюзия), кнопки и ворота, пики, проваливающиеся полы, дверь уровня, меч и бой, стражи с ИИ, HP и зелья.

Не сделано: выход в следующий уровень (дверь открывается, но войти в неё нельзя), звук, таймер/HUD времени, сохранения. Что берём в работу сейчас — TASKS.md; план следующих уровней — ../docs/levels_plan.md.