Разгрузка W1: смена уровня и служебный слой — в банк 8
_main занимал 3658 байт резидента, и добрая половина этого — события «раз в партию». Вынесены целиком: - pop_level_change — смена уровня (катсцена, гашение, загрузка, палитра, звук): 61 строка, наружу осталось одно условие и вызов; - pop_frame_ui — меню, F10 и QuickSave/Load: 58 строк, плюс туда же уехали edge-состояния клавиш и сами коды клавиш (снаружи они больше не нужны). _CODE 24102 -> 23626, запас W2 вырос с 86 до 559 байт. Заодно три правки по замечаниям: - затемнение фона под меню считалось числом «2», а шкала ступеней выросла с 4 до 32 — фон почти не гас. Теперь доля от шкалы (POP_PAL_DIM_BLACK/2); тем же прошлись по остаткам pop_pal_apply(4); - в катсценах персонажи появлялись только после fade in: первый кадр рисуется ПОД чёрной палитрой, и картинка проявляется целиком, вместе с актёрами (cut_scene_8/9/12_short/ending, pre_room_animated, intro_pv_animated); - отладочная полоса по умолчанию выключена. Host-тесты: 15 наборов. Проверено в MAME: меню открывается и закрывается, фон под ним затемнён, полосы нет. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1206,6 +1206,38 @@ N навык M» — отдельная надобность, если пона
|
||||
|
||||
Фазы З1..З5 и список «проверить артефактом до кодинга» — в доке.
|
||||
|
||||
### <a id="mob-spr-emm"></a>MOB-SPR-EMM. Композит падающего куска — в EMM (1284 Б W2)
|
||||
|
||||
`mob_spr` (`pop_room.c`) — самый крупный буфер в W2: 4 + 64*20 байт под
|
||||
композит падающей плиты. Это половина нынешнего дефицита W2.
|
||||
|
||||
**В БАНК ЕГО ПЕРЕНЕСТИ НЕЛЬЗЯ** (разобрано 2026-08-26). Цепочка рисования
|
||||
— `pop_room` (банк 7) -> `pop_mem_b` (банк 5) -> `blit_b_clip` (резидент), и
|
||||
трамплин на `pop_mem_b` переключает W3. Указатель на данные банка 7 после
|
||||
этого показывает на страницу банка 5: блит нарисует мусор, причём молча.
|
||||
`--bank-data` вдобавок действует на весь модуль, а `mobs` из того же файла
|
||||
читают снаружи.
|
||||
|
||||
**ЧТО РАБОТАЕТ — EMM-страница с маппингом в W0.** W0 не переключают ни
|
||||
трамплин (он трогает только W3), ни звуковой ISR (насос живёт в W3), значит
|
||||
адрес `0x0000+off` валиден и в банке 7, и в банке 5, и в резиденте — ровно
|
||||
как у атласных спрайтов, которые тем же блитом и рисуются. `blit_b_clip`
|
||||
окно не трогает, маппингом занимается вызывающий.
|
||||
|
||||
**Цена.** `mob_spr_build` читает три части через `gfx_w0_map(a->page)`, а
|
||||
приёмник должен быть в том же окне — держать оба нельзя. Сборку придётся
|
||||
вести построчно: строка части в 64-байтовый буфер на стеке, перемаппить
|
||||
окно, записать. Вызывается это лишь на смену тайлсета. Плюс
|
||||
`gfx_w0_map`/`unmap` вокруг каждого куска — около 1350 тактов, при шести
|
||||
кусках меньше 2 % кадра.
|
||||
|
||||
**Чем подтверждать.** Падающие плиты в комнате 1.2 и каскад уровня 13:
|
||||
ошибка проявится не крашем, а мусором на месте куска.
|
||||
|
||||
**Дешёвая половинчатая мера** (если 1284 Б не нужны целиком): буфер объявлен
|
||||
с запасом 64x20, фактический композит около 58x19 — точные константы дают
|
||||
~180 байт без единого риска.
|
||||
|
||||
### <a id="pal-arc"></a>PAL-ARC. Палитры — в архив своей группы (полишинг)
|
||||
|
||||
Файлов палитр в игре шесть: `KID\kid.pal` (1024 Б), `PV\story.pal`,
|
||||
|
||||
Reference in New Issue
Block a user