diff --git a/applications/PoP/roomtest/TASKS.md b/applications/PoP/roomtest/TASKS.md index eca580f..0ddd2d2 100644 --- a/applications/PoP/roomtest/TASKS.md +++ b/applications/PoP/roomtest/TASKS.md @@ -1,4 +1,4 @@ -# roomtest — доска текущих задач (обновлено 2026-08-01) +# roomtest — доска текущих задач (обновлено 2026-08-04) Не список багов (открытые — [`bug_list.md`](bug_list.md), закрытые с разбором корней — [`bug_closed.md`](bug_closed.md)) и не план фаз @@ -16,10 +16,85 @@ --- +## ТЕКУЩАЯ ЦЕЛЬ: уровни 1–3 (подземелье) отлажены целиком + +Решение 2026-08-04: **palace (уровни 4+) откладываем**, доводим до +играбельности три dungeon-уровня. Основание — они не требуют ни одного +нового ассета фона: инвентарь тайлов, снятый с `res200N.bin`, показывает, +что новое появляется только так — + +``` +ур. 1 empty, floor, spike, pillar, gate, closer, potion, loose, debris, + opener, level_door L/R, torch, wall, skeleton, sword ← всё есть +ур. 2 bigpillar_bottom(8), bigpillar_top(9), doortop(12) ← есть (2026-08-04) +ур. 3 chomper(18) ← НЕТ механики +ур. 4 lattice_pillar(25)…lattice_right(29) + тайлсет palace ← отложено +``` + +Порядок работ — ниже: **L3-CHOMP → L3-SKEL → L3-CHKP** (уровень 3 в +принципе не проходится без них), параллельно **L1-SPEED** (общий для всех +уровней) и приёмочные прогоны **L1-PASS / L2-PASS**. + +| Задача | Что | Блокирует | +|--------|-----|-----------| +| [L3-CHOMP](#l3-chomp) | чомперы (5 шт) | прохождение ур. 3 | +| [L3-SKEL](#l3-skel) | скелет (единственный противник ур. 3) | прохождение ур. 3 | +| [L3-CHKP](#l3-chkp) | чекпойнт ур. 3 | корректный респавн ур. 3 | +| [L1-SPEED](#l1-speed) | игра на ~39 % быстрее оригинала | ощущение от ВСЕХ уровней | +| [L1-PASS](#l1-pass) / L2-PASS | сквозные прогоны + таблица 24 комнат | приёмка | +| [DBG-CHEATS](#dbg-cheats) | `[`/`]` — подгонка Кида по X | отладка (BUG-GATE-PASS-1) | + +--- + ## P0 — делаем сейчас -*(KBD-1 закрыт до финальной полировки, CLIP-1 сделан — оба ниже. P0 пуст; -следующая в работе — P1, начиная с L1-START/L1-EXIT.)* +### L3-CHOMP. Чомперы — механика уровня 3 + +**Где:** 5 штук, комнаты 5(тайл 4), 16(23,24,25), 22(26). Дальше они почти +на каждом уровне, так что это вложение не только в ур. 3. + +**Что портировать:** `animate_chomper` (seg007) — состояние в `room_modif`, +как у пик/ворот, значит шаблон уже отработан (`gates_spikes_plan.md`); +коллизия и смерть Кида в сомкнутых челюстях (`seg004`/`seg006`); отрисовка +кадра по модификатору (`draw_tile_anim`, ветка `tiles_18_chomper`). + +**Риск:** банк 2 (`pop_bg`) занят на **86.5 %, свободно 2213 Б** — считать +место ДО кодинга (`levels_plan.md` §5.1), иначе повторится «банк 2 упёрся +в потолок» (коммит 2f3e854). Свободные номера банков есть (5+). + +### L3-SKEL. Скелет — единственный противник уровня 3 + +**Важно:** в данных уровня 3 **стражей нет вообще** (`guards_tile` пуст во +всех 24 комнатах). Единственный враг — скелет, и он не «страж из данных», +а **спецсобытие** `check_skel` (seg002:1044): + +> в комнате 1, когда `Kid.curr_col` == 2 или 3 и дверь уровня открыта, +> тайл `tiles_21_skeleton` (комната 1, тайлпос 15) стирается в пол, а на +> его месте поднимается персонаж: `charid_4_skeleton`, меч сразу вынут, +> `seq_88_skel_wake_up`, skill 2, HP 3. + +Ещё два тайла скелета (комнаты 17 и 19) — декорация, они не оживают. + +**Что нужно:** +- `charid_4_skeleton` в `enter_guard`/`pop_guard_enter` (seg002:196): при + `tbl_guard_type[level] == 2` персонаж поднимается **с вынутым мечом** и + последовательностью `seq_63_guard_active_after_fall`, а не + `seq_77_guard_stand_inactive`; +- скелет **бессмертен** — чит `K` его уже не берёт (`pop_guard_kill` + проверяет `CHARID_4_SKELETON`), но и боёвка должна возвращать его к + жизни (seg002:252); +- **новый атлас**: `../SDLPoP/data/SKEL/` (29 файлов) — `pop_pack_guard.py` + сейчас прибит к `GUARD/`, нужен параметр набора (`tbl_guard_dat` = + GUARD/FAT/SKEL/VIZIER/SHADOW). + +### L3-CHKP. Чекпойнт уровня 3 + +`level3_set_chkp` (seg002:519): вход в комнату 7 ставит `checkpoint = 1` и +`hitp_beg_lev = hitp_max`. `do_startpos` (seg003:141) при `checkpoint` +подменяет старт: комната 2, тайлпос 6, направление влево, и убирает +loose-плиту (комната 7, колонка 4, ряд 0). Механика `hitp_beg_lev` уже +есть (сделана в L2), остаётся сам флаг и подмена старта. + ### KBD-1. Shift + стрелки: нажатия теряются — **ПРИЧИНА НАЙДЕНА, ФИКС ПРОВЕРЕН** @@ -424,7 +499,7 @@ BUG-1 (провал на row 1 при переходе через открыты 5 строк из 24, инструмент (`ROOMNAV`) готов. Делать вместе с L1-PASS: это единственный оставшийся источник новых багов уровня 1. -### L1-SPEED. Игра идёт быстрее оригинала (найдено 2026-08-01) +### L1-SPEED. Игра идёт быстрее оригинала (найдено 2026-08-01) Сверка таймингов: оригинал — `BASE_FPS = 60` при `base_speed = 5` тиков на логический кадр (`SDLPoP/src/types.h:1373`, `data.h:869`) = **83.3 мс**, в бою `fight_speed = 6` = **100 мс**. У нас `roomtest.c` ждёт **три** `gfx_wait_vsync()` @@ -433,7 +508,7 @@ BUG-1 (провал на row 1 при переходе через открыты Условие «делать ПОСЛЕ CLIP-1» **снято** — CLIP-1 закрыт (см. P0). Проверка — секундомером по одинаковому отрезку рядом с живым SDLPoP, не «на глаз». -### L1-PASS. Сквозное прохождение уровня 1 +### L1-PASS. Сквозное прохождение уровня 1 От старта до двери уровня одним заходом: подбор меча, страж, кнопки/ворота, пики, loose-полы, зелье, падения. Это приёмка этапа 1 и одновременно регресс-база для уровня 2. @@ -491,7 +566,7 @@ Shift+L → уровень 3 (комната 9). То есть цепочка - цвет стража из данных (`guards_color`, на уровне 2 их три разных) — у нас один атлас; отдельная задача, к переходам отношения не имеет. -### DBG-CHEATS. Отладочные читы SDLPoP — разведка сделана, код не написан +### DBG-CHEATS. Отладочные читы SDLPoP — разведка сделана, код не написан Записано 2026-08-03 (по ходу охоты за BUG-GATE-PASS-1, отложено на потом). Мотив прямой: мост MAME **теряет нажатия при быстрой отправке**, поэтому