Мышь уровня 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:
@@ -90,6 +90,25 @@
|
||||
* (TASKS_OPEN.md, L1-SPEED), а не свойство зелья. */
|
||||
#define POP_FEATHER_FRAMES 225
|
||||
|
||||
/* ---- Спецсобытие «МЫШЬ» (уровень 8, комната 16) ---------------------- *
|
||||
* Кнопка (0,7) комнаты 16 открывает решётку (0,3) — ту, за которой лежит
|
||||
* путь через комнату 4 (два чомпера) к кнопке выхода в комнате 3. Сам Кид
|
||||
* до кнопки с левой площадки не дотягивается (провал в колонках 4..6),
|
||||
* поэтому, когда дверь уровня уже открыта, а он всё ещё в комнате 16,
|
||||
* оригинал через 150 тиков присылает мышь: она пробегает справа налево по
|
||||
* верхнему ряду, наступает на кнопку и убегает обратно (do_timers
|
||||
* seg003:0545, do_mouse seg003:0ABA, autocontrol_mouse seg002:07EB).
|
||||
*
|
||||
* Числа — custom-константы SDLPoP (data.h:821): уровень/комната/задержка/
|
||||
* стартовая X. Пороги разворота (166) и исчезновения (200) — литералы
|
||||
* autocontrol_mouse. Задержка в ИГРОВЫХ КАДРАХ, как POP_FEATHER_FRAMES. */
|
||||
#define POP_MOUSE_LEVEL 8
|
||||
#define POP_MOUSE_ROOM 16
|
||||
#define POP_MOUSE_DELAY 150
|
||||
#define POP_MOUSE_START_X 200
|
||||
#define POP_MOUSE_TURN_X 166 /* x < этого — развернуться и уйти */
|
||||
#define POP_MOUSE_LEAVE_X 200 /* x >= этого в стойке — исчезнуть */
|
||||
|
||||
/* ---- Уровень зелий (SDLPoP: «potions level», seg006:1894) ------------ *
|
||||
* На нём синие склянки «вреда» забирают ПОЛОВИНУ запаса HP, а не единицу.
|
||||
* В оригинале это условие `current_level == 15` прямо в proc_get_object. */
|
||||
|
||||
Reference in New Issue
Block a user