Трасса kidobj для сверки с SDLPoP + разбор боя у шва

Инструмент: pop_dbg_kidobj печатает то же, что вывод, добавленный
пользователем в SDLPoP add_kid_to_objtable — tilepos/frame/act/col/cols/rows
(+ наша комната).  Считает по set_char_collision и set_objtile_at_char.
Выключен по умолчанию (DBG_KIDOBJ 0), включается одним define; вывод
забирает брейкпоинт MAME на резидентном pop_dbg_trap.

Сверка подтвердила фикс a498255: окно перехода совпало кадр в кадр, за бой
на уровне 1 комната сменилась один раз, на уровне 8 у шва 24/18 — четыре
раза на 387 кадров боя, и все четыре на РАЗРЕШЁННЫХ кадрах (170/164/170/165).
Смен на запрещённых кадрах во всей трассе нет.

Разбор целиком — BUGS_CLOSED.md#seam-fight-flicker, включая невыясненное
расхождение поля cols.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 17:07:01 +03:00
parent a498255471
commit 3f643532c9
5 changed files with 157 additions and 0 deletions
+8
View File
@@ -79,6 +79,14 @@ uint8_t pop_dbg_hits;
void pop_dbg_trap(void) { pop_dbg_hits++; }
/* ВРЕМЕННО: трасса kidobj — порт вывода, который пользователь добавил в
* SDLPoP add_kid_to_objtable (seg008:1679), чтобы сверить поведение у шва
* кадр в кадр. Буфер РЕЗИДЕНТНЫЙ, потому что читает его брейкпоинт MAME:
* printf из действия точки берёт байты по фиксированному адресу. Поля —
* ровно те же и в том же порядке, плюс наша комната девятым (у оригинала
* смена комнаты видна по скачку tilepos, а нам удобнее явно). */
int8_t pop_dbg_obj[9];
/* Зеркало уровня 4 — см. pop_state.h. */
int8_t pop_jumped_mirror;