Пункт 0: отсев кладки по окну fore-клипа; закрыт BUG-CHEAT-FIGHT-1
Три шага пункта 0 из docs/perf_backlog.md. 1. Ранний выход из wall_pattern_palace по окну fore-клипа: узор целиком лежит в x [xh*8, xh*8+32), y [dmy-59, dby], и если окно его не задевает — возврат до первой заливки. Замер: от входа в узор до конца всего прохода 6 055 тактов вместо ~60 000 на тайл. 2. Отсев КАЖДОГО декаля (wp_blit) по реальному габариту. pop_blit_b тоже отсеивает до маппинга страницы, но по заведомо большему 64x64 — куски кладки высотой 3..12 px он пропускал и платил полный atlas_image + gfx_w0_map (~9 760 тактов на блит), чтобы там обнаружить, что рисовать нечего. Размеры сняты из каталогов атласов и заданы верхней границей по группе. 3. То же для ПОДЗЕМЕЛЬЯ: ранний выход wall_pattern (габарит выше — левая марка уходит на dby+POP_YOFF-67) плюс wp_blit на RNDBLOCK, обоих разделителях и обеих марках. Замер (уровень 4, комната 18, Кид сдвигается читом ] по пикселю, skip выключен, шесть тайлов в fore-окне, три из них — дворцовая стена): тайл стены ~12 700 вместо 60 000-74 000, fore-проход целиком 70 681 вместо 171 693, работа за кадр 419 839, период 3 растровых кадра вместо 4. Уровень 1 (подземелье) проверен снимком — кладка, марки, разделители на месте. Остаток в проходе — пролог pop_char_fore 17 208 тактов (пункт 1 backlog'а). Отдельно записано: на ШВЕ пролог разбухает до 134 730, причина не разобрана. BUG-CHEAT-FIGHT-1 (заведён 2026-08-07) закрыт по своему же плану: ветка ROOMNAV после kid_init/pop_kid_hp_reset гасит состояние схватки (Kid.sword = SWORD_0_SHEATHED, holding_sword, offguard, guard_refrac). Меч в инвентаре не теряется. Это болезнь чита: в оригинале телепорта между комнатами нет и в режим боя без соперника попасть нечем. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -663,6 +663,21 @@ int main(void)
|
||||
kid_init(SEQ_STAND, (int8_t)(pos % 10), (int8_t)(pos / 10), 0);
|
||||
pop_kid_hp_reset();
|
||||
dead_frames = 0;
|
||||
/* ВЫХОД ИЗ БОЯ (BUG-CHEAT-FIGHT-1). Телепорт с вынутым мечом
|
||||
* заклинивал управление намертво: pop_control при
|
||||
* Kid.sword == SWORD_2_DRAWN уходит в control_with_sword, а
|
||||
* там единственный выход — ветка «убрать меч» на кадре
|
||||
* FRAME_171_STAND_WITH_SWORD. После kid_init(SEQ_STAND) кадр
|
||||
* обычный, стража в новой комнате нет, swordfight не
|
||||
* запускается — и диспетчер каждый кадр не делает НИЧЕГО.
|
||||
* Это болезнь ЧИТА: в оригинале телепорта между комнатами
|
||||
* нет, попасть в режим боя без соперника нечем. Меч в
|
||||
* инвентаре (pop_have_sword) НЕ теряем — только состояние
|
||||
* схватки. */
|
||||
Kid.sword = SWORD_0_SHEATHED;
|
||||
holding_sword = 0;
|
||||
offguard = 0;
|
||||
guard_refrac = 0;
|
||||
}
|
||||
nav_prev = nav;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user