PoP roomtest: отрисовка стража — в собственный банк (банк 2 упёрся в потолок)
Банк 2 (pop_bg + pop_gdraw) подошёл к границе страницы вплотную: 16 021 из 16 384, свободно 363 байта. А расти ему ещё есть куда — тайлы поздних уровней, чомперы, зеркало, анимации смерти стража. pop_gdraw.c уехал в банк 4 (n_banks 3 -> 4): банк 2 16 021 -> 13 792 (84.2 %, свободно 2 592) банк 4 2 236 (13.6 %, свободно 14 148) Цена: pop_fore_over_char стал кроссбанковым, поэтому помечен __banked — один трамплин (~654 такта) за кадр, других вызывающих у него нет. pop_fore_set_clip уже был __banked, так что там ничего не изменилось. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,7 @@ MEMORY ?= huge # small-раскладка + банки кода в W
|
|||||||
# банк1→банк2→банк1 в MAME 2026-07-30). Теперь в банки можно уводить и
|
# банк1→банк2→банк1 в MAME 2026-07-30). Теперь в банки можно уводить и
|
||||||
# логику, которая рисует. См. docs/layout_plan_v2.md §2, memory
|
# логику, которая рисует. См. docs/layout_plan_v2.md §2, memory
|
||||||
# sdcc_banked_call_rules.
|
# sdcc_banked_call_rules.
|
||||||
EXTRA_FLAGS ?= --gfx 256 --bank 2=pop_bg.c --bank 2=pop_gdraw.c --bank 3=pop_map.c --bank 1=guards.c $(PROF_FLAGS)
|
EXTRA_FLAGS ?= --gfx 256 --bank 2=pop_bg.c --bank 4=pop_gdraw.c --bank 3=pop_map.c --bank 1=guards.c $(PROF_FLAGS)
|
||||||
# Профилирование полосами бордюра (см. PROF() в roomtest.c) — ВКЛЮЧЕНО по
|
# Профилирование полосами бордюра (см. PROF() в roomtest.c) — ВКЛЮЧЕНО по
|
||||||
# умолчанию, пока идёт работа с производительностью; make PROF=0 выключает.
|
# умолчанию, пока идёт работа с производительностью; make PROF=0 выключает.
|
||||||
# Каждая фаза кадра красит бордюр в свой цвет, высота полосы на скриншоте
|
# Каждая фаза кадра красит бордюр в свой цвет, высота полосы на скриншоте
|
||||||
|
|||||||
@@ -1592,7 +1592,7 @@ void pop_fore_over_kid(int obj_x, int obj_y, uint16_t w, uint16_t h,
|
|||||||
* (seq_77..seq_84). Появятся падающие/висящие стражи — тогда и общий
|
* (seq_77..seq_84). Появятся падающие/висящие стражи — тогда и общий
|
||||||
* порт redraw_at_char2, а не догадки сейчас. */
|
* порт redraw_at_char2, а не догадки сейчас. */
|
||||||
void pop_fore_over_char(int obj_x, int obj_y, uint16_t w, uint16_t h,
|
void pop_fore_over_char(int obj_x, int obj_y, uint16_t w, uint16_t h,
|
||||||
int8_t dir)
|
int8_t dir) __banked
|
||||||
{
|
{
|
||||||
int8_t r, c;
|
int8_t r, c;
|
||||||
fclip_on = 1; /* окно = прямоугольник спрайта */
|
fclip_on = 1; /* окно = прямоугольник спрайта */
|
||||||
|
|||||||
@@ -82,8 +82,11 @@ void pop_fore_set_clip(int x, int y, int w, int h) __banked;
|
|||||||
/* То же для НЕ-Kid персонажа (страж): только слой fore + полоса потолка,
|
/* То же для НЕ-Kid персонажа (страж): только слой fore + полоса потолка,
|
||||||
* без оверлеев поз виса/полёта/подъёма. obj_x — ЛОГИЧЕСКАЯ координата
|
* без оверлеев поз виса/полёта/подъёма. obj_x — ЛОГИЧЕСКАЯ координата
|
||||||
* (до ×8/7), как у kid_fp_obj_x(). */
|
* (до ×8/7), как у kid_fp_obj_x(). */
|
||||||
|
/* __banked: отрисовка стража уехала в СВОЙ банк (pop_gdraw.c), поэтому
|
||||||
|
* вызов стал кроссбанковым и обязан идти через трамплин. Зовётся раз в
|
||||||
|
* кадр, других вызывающих нет — цена одного трамплина здесь не видна. */
|
||||||
void pop_fore_over_char(int obj_x, int obj_y, uint16_t w, uint16_t h,
|
void pop_fore_over_char(int obj_x, int obj_y, uint16_t w, uint16_t h,
|
||||||
int8_t dir);
|
int8_t dir) __banked;
|
||||||
|
|
||||||
/* Восстановить фон там, где в прошлых кадрах рисовался ОВЕРЛЕЙ
|
/* Восстановить фон там, где в прошлых кадрах рисовался ОВЕРЛЕЙ
|
||||||
* (draw_other_overlay/floor_overlay/полоса потолка): он выходит за
|
* (draw_other_overlay/floor_overlay/полоса потолка): он выходит за
|
||||||
|
|||||||
@@ -46,8 +46,13 @@ __sfr __at (0xFE) io_border;
|
|||||||
#define PROF(n) ((void)0)
|
#define PROF(n) ((void)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Сколько банков грузит crt0_banked (читает его стартовый код). */
|
/* Сколько банков грузит crt0_banked (читает его стартовый код).
|
||||||
const uint8_t n_banks = 3;
|
* 1 = guards (ИИ/боёвка), 2 = pop_bg (фон, fore, loose), 3 = pop_map
|
||||||
|
* (коллизия/физика), 4 = pop_gdraw (отрисовка стража + полоса HP).
|
||||||
|
* Отрисовка стража вынесена из банка 2 отдельно: тот подошёл к 16 КБ
|
||||||
|
* вплотную (16 021 из 16 384), а расти ему ещё есть куда — тайлы поздних
|
||||||
|
* уровней, чомперы, зеркало. */
|
||||||
|
const uint8_t n_banks = 4;
|
||||||
|
|
||||||
/* Режим читов (pop_cheat.h): на время разработки включаем в main. */
|
/* Режим читов (pop_cheat.h): на время разработки включаем в main. */
|
||||||
uint8_t pop_cheats;
|
uint8_t pop_cheats;
|
||||||
|
|||||||
Reference in New Issue
Block a user