Мышь уровня 8 + холодная половина главного цикла в банк 8
Спецсобытие уровня 8 (SDLPoP seg003:0545/0ABA, seg002:07EB): когда дверь уровня открыта, а Кид остаётся в комнате 16, через 150 кадров приходит мышь, пробегает справа налево по верхнему ряду, наступает на кнопку (0,7) — решётка (0,3) открывается — и убегает. Ассетов не потребовалось: кадры 186..188 идут по таблице Кида, их спрайты (images 130..132) уже лежат в kid16.atl, отрисовка подхватывает мышь сама. - guards.c: pop_check_mouse, autocontrol_mouse, ветки мыши в autocontrol_opponent / play_guard / check_can_guard_see_kid; - pop_leveldoor_open стал word, как в оригинале (в него же считается задержка — байт переполнился бы через 255 кадров); - leave_guard больше не записывает тень и мышь в данные уровня (seg002:02F5); - полосы HP у мыши нет (seg000:1159); - tests-host/t_mouse: 17 проверок, единственный набор с guards.c. Разгрузка резидента (куча в huge упала до 879 Б): pop_start_level, find_start_level_door, чит-навигация по комнатам и лейбл номера уехали в roomtest_cold.c (--bank 8, n_banks = 8). _CODE 25653 -> 24825, куча -> 1707 Б; кадровый путь не тронут. Проверено: tests-host 6/6, make size-check OK, живьём в MAME (мышь появилась, нажала кнопку, решётка поехала вверх, мышь ушла). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -68,6 +68,12 @@
|
||||
#define CHARID_2_GUARD 2
|
||||
#define CHARID_4_SKELETON 4
|
||||
#define CHARID_5_PRINCESS 5
|
||||
/* МЫШЬ (спецсобытие уровня 8) — тоже персонаж слота Guard: своей таблицы
|
||||
* кадров у неё нет, кадры 186..188 лежат в таблице КИДА (load_frame,
|
||||
* seg006:0293 — общий case с charid_0_kid), а спрайты (images 130..132) —
|
||||
* в атласах Кида, страница kid16.atl. Поэтому отрисовка её подхватывает
|
||||
* без единой правки: pop_frame_tbl_is_guard(24,…) отдаёт 0. */
|
||||
#define CHARID_24_MOUSE 24
|
||||
|
||||
/* dir_56_none (types.h:402): «направления нет» — им clear_char убирает
|
||||
* персонажа со сцены. Значение 0x56 в int8_t = 86, то есть заведомо не
|
||||
@@ -191,6 +197,12 @@ void pop_check_can_guard_see_kid(void) __banked;
|
||||
* в кадр, ДО логики персонажей (порядок play_frame, seg000:868). */
|
||||
void pop_check_skel(void) __banked;
|
||||
|
||||
/* Спецсобытие уровня 8 — МЫШЬ (do_timers seg003:0545 + do_mouse seg003:0ABA).
|
||||
* Условие запуска: дверь уровня открыта И Кид в комнате 16; тогда счётчик
|
||||
* pop_leveldoor_open растёт кадрами, и на 150-м мышь появляется у правого
|
||||
* края верхнего ряда. Звать раз в кадр рядом с pop_check_skel. */
|
||||
void pop_check_mouse(void) __banked;
|
||||
|
||||
/* check_shadow (seg002:0064) — СПЕЦСОБЫТИЕ входа в комнату: на «шадоу»-
|
||||
* уровнях слот соперника занимает ТЕНЬ, а не страж из данных. Звать ВМЕСТО
|
||||
* pop_guard_enter при входе в комнату; вернула 1 — событие обработано и
|
||||
|
||||
Reference in New Issue
Block a user