Мышь уровня 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:
@@ -1,4 +1,4 @@
|
||||
# Точка входа для следующей сессии (обновлено 2026-08-12)
|
||||
# Точка входа для следующей сессии (обновлено 2026-08-12, вечер)
|
||||
|
||||
Файл для старта с чистого контекста: где всё стоит, что делать первым, какие
|
||||
грабли уже собраны. Читать целиком — он короткий. Дальше по ссылкам:
|
||||
@@ -6,39 +6,37 @@
|
||||
|
||||
---
|
||||
|
||||
## 1. СЛЕДУЮЩАЯ ЗАДАЧА: живая проверка зелий в MAME
|
||||
## 1. СЛЕДУЮЩАЯ ЗАДАЧА: smoke-прогон уровня 8
|
||||
|
||||
Код зелья медленного падения НАПИСАН (все шесть шагов плана
|
||||
[`TASKS_OPEN.md#l7-feather`](TASKS_OPEN.md#l7-feather)) и закрыт хост-тестом,
|
||||
но в MAME ещё не смотрелся. Проверить две сцены:
|
||||
Зелья приняты пользователем (уровень 2 — «−HP», уровень 7 — перо), уровень 7
|
||||
считается прошедшим smoke. Спецсобытие уровня 8 —
|
||||
[L8-MOUSE](TASKS_CLOSED.md#l8-mouse) — **закрыто 2026-08-12**: мышь
|
||||
портирована, покрыта хост-набором `t_mouse` (17 проверок) и проверена живьём в
|
||||
MAME (появилась, нажала кнопку (0,7) комнаты 16, решётка (0,3) поехала вверх,
|
||||
ушла и погасла). Новых тайлов уровень 8 не приносит вовсе.
|
||||
|
||||
- **уровень 7, комната 1** — зелье пера: зелёные пузырьки, зелёная вспышка
|
||||
при питье, спуск в шахту заметно медленнее обычного и без урона;
|
||||
- **уровень 2, комната 13, тайл (1,3)** — зелье «−HP»: пузырьки СИНИЕ (были
|
||||
красные — цвет по типу зелья не был портирован вовсе), HP убавляется на
|
||||
единицу, экран краснеет ровно один раз.
|
||||
Осталось пройти сам уровень: он длинный, с возвратом через два чомпера
|
||||
комнаты 4, и стражи там сильнее прежних — комната 5 держит **skill 7**
|
||||
(максимум из встречавшихся), комнаты 12/22/24 — skill 2/3/3.
|
||||
|
||||
Заодно попадают под проверку `pop_flash_color` (жёлтый/красный/зелёный) и
|
||||
атлас `pop_pot` (23 → 37 спрайтов: добавлены зелёный и синий наборы кадров
|
||||
пузырька).
|
||||
Правило появления мыши (сверено с оригиналом, детали в
|
||||
[TASKS_CLOSED](TASKS_CLOSED.md#l8-mouse)): счётчик — сам `leveldoor_open`,
|
||||
растёт только пока Кид в комнате 16, срабатывание ровно на 150, **второго
|
||||
раза нет**; сбрасывает только рестарт уровня. Тупика это не создаёт — низом
|
||||
через провал есть путь к двери уровня ценой 1 HP.
|
||||
|
||||
**Зацеп в падении — закрыт 2026-08-12**
|
||||
([GRAB-BELOW-ROOM](BUGS_CLOSED.md#grab-below-room)). Оказалось, что зацеп
|
||||
из падения был жив, а сломан был спуск через НИЖНЮЮ кромку комнаты (уровень 7,
|
||||
комната 14): `do_fall` не пускал ряд персонажа до 3, и `check_grab` на этом
|
||||
отрезке не звался ни разу. Плюс восстановлена ветка `ACT_MIDAIR` (кадры
|
||||
102..105 — начало падения). Проверено хост-тестом `t_grab` и живьём в MAME.
|
||||
Резидент разгружен ([MEM-COLD1](TASKS_CLOSED.md#mem-cold1)): холодная половина
|
||||
главного цикла уехала в **банк 8** (`roomtest_cold.c`), куча 879 → **1707 Б**.
|
||||
Следующие кандидаты — [MEM-COLD2](TASKS_OPEN.md#mem-cold2).
|
||||
|
||||
Осталась ощущенческая часть — [GRAB-KBD-TIMING](BUGS_OPEN.md#grab-kbd-timing):
|
||||
зацеп при входе на уровень 7 срабатывает менее стабильно, чем в оригинале
|
||||
(подозрение на клавиатурный модуль и на общий темп игры, `L1-SPEED`).
|
||||
**Решение пользователя: разбирать после того, как будут готовы все уровни.**
|
||||
Ощущенческий хвост прежний — [GRAB-KBD-TIMING](BUGS_OPEN.md#grab-kbd-timing),
|
||||
разбирается после готовности всех уровней (решение пользователя).
|
||||
|
||||
## 2. Состояние репозитория
|
||||
|
||||
Всё закоммичено, `main` чист. `tests-host`: 5 наборов проходят
|
||||
(`[char] 65`, `[geom] 3144`, `[grab] 55`, `[phys] 1727`, `[wall] 1`).
|
||||
`make size-check`: OK (65 программ, роста нет).
|
||||
Всё закоммичено, `main` чист. `tests-host`: **6 наборов** проходят
|
||||
(`[char] 65`, `[geom] 3144`, `[grab] 55`, `[mouse] 17`, `[phys] 1727`,
|
||||
`[wall] 1`). `make size-check`: OK (65 программ, роста нет).
|
||||
|
||||
Коммиты 2026-08-12:
|
||||
|
||||
@@ -55,10 +53,17 @@
|
||||
## 3. Состояние окружения
|
||||
|
||||
- **MAME запущена с мостом**, на HDD — roomtest, собранный с
|
||||
`-DFIRST_LEVEL=7`. Пересобрать образ: `make hdd` (или
|
||||
`make PROF_FLAGS="-DPROF_BORDER=1 -DFIRST_LEVEL=N" hdd` — при смене
|
||||
`FIRST_LEVEL` нужен `touch roomtest.c`, иначе не переедет), после чего
|
||||
MAME **обязана** пройти полный рестарт (memory `mame_hdd_rebuild_restart`).
|
||||
`-DFIRST_LEVEL=8`. **ПРАВИЛО ПОЛЬЗОВАТЕЛЯ: перед сборкой образа —
|
||||
`make clean`, потом `make`, потом `make hdd`** (memory
|
||||
`mame_build_clean_rule`). Без этого `make hdd` кладёт на диск ПРОШЛУЮ
|
||||
сборку: `FIRST_LEVEL` живёт внутри `roomtest.c`, и без изменения исходника
|
||||
make считает `.exe` актуальным — 2026-08-12 на этом уехал уровень 1 вместо
|
||||
8, заметил пользователь. После пересборки образа MAME **обязана** пройти
|
||||
полный рестарт (memory `mame_hdd_rebuild_restart`).
|
||||
- Адреса состояния сместились после MEM-COLD1: брать из
|
||||
`.sprinter-cc-roomtest/roomtest.map` заново (`cur_room` 0xA33D,
|
||||
`pop_leveldoor_open` 0xA34C, `Kid` 0xA3B1, `Guard` 0xA759 — на сборку
|
||||
2026-08-12). Мост: `setmem ADDR HEXBYTES` (не `write`), `mem ADDR N`.
|
||||
- **Остановка MAME — `mame/v306/bridge_cmd.sh 'cmd exit'`**, НЕ `kill`
|
||||
(правило пользователя). `pkill -f` бывает не срабатывает, и остаются ДВА
|
||||
инстанса, оба отвечающих на файловый IPC — тогда скриншоты приходят от
|
||||
|
||||
Reference in New Issue
Block a user