Трасса 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
+14
View File
@@ -46,6 +46,14 @@ __sfr __at (0xFE) io_border;
#ifndef PROF_BORDER
#define PROF_BORDER 1
#endif
/* ВРЕМЕННО: покадровая трасса kidobj для сверки с SDLPoP (см.
* pop_dbg_kidobj в roomtest_cold.c). 0 — выключить.
* СВОЙ #ifndef, а не общий с PROF_BORDER: тот задаётся ключом сборки
* (-DPROF_BORDER=1), и всё, что лежало внутри его блока, не определялось
* вовсе — трасса молча не включалась. */
#ifndef DBG_KIDOBJ
#define DBG_KIDOBJ 0
#endif
#if PROF_BORDER
#define PROF(n) io_border = (n)
#else
@@ -640,6 +648,12 @@ int main(void)
if (!g_after && !(skip & 2)) { pop_char_draw(POP_CH_OPP); pop_char_fore(POP_CH_OPP); }
PROF(6); /* кадр Кида (тот же циан) */
if (!(skip & 1)) pop_char_draw(POP_CH_KID); /* спрайт + брызги + клинок */
#if DBG_KIDOBJ
/* ВРЕМЕННО: трасса для сверки с SDLPoP кадр в кадр. Место — то
* же, что у оригинала (конец add_kid_to_objtable), и ВНЕ skip:
* пропуск перерисовки не должен рвать трассу. */
pop_dbg_kidobj();
#endif
if (g_after && !(skip & 2)) { pop_char_draw(POP_CH_OPP); pop_char_fore(POP_CH_OPP); }
/* Брызги урона рисует сама отрисовка персонажа (порядок objtable:
* сразу после него и до клинка), а флаги снимаем здесь: соперника