Тайлсет дворца: палитра применялась до kid.pal и затиралась ею
Симптом (эталон SDLPoP против нашего кадра, уровень 4): дворцовая геометрия рисовалась подземельными красками — сине-серые арки вместо песочных, бирюзовая дверь уровня вместо кремовой, сланцевый пол вместо коричнево-розового. Бирюза и зелень — это dungeon-слоты 0x5E (0,117,76) и 0x5F (0,165,157). Причина в порядке старта: атласы (и вместе с ними палитра тайлсета) грузятся ДО initgraph, потому что тот снимает DSS-страницу W0. А kid.pal — ЕДИНАЯ игровая палитра, собранная из VDUNGEON (pop_pack_kid.py build_palette), — читается ПОСЛЕ initgraph и затирает слоты 0x50..0x6F. pop_bg_pal_apply() возвращает 32 записи текущего набора; зовётся сразу за gfx_pal_sync(). На смене уровня палитра по-прежнему едет внутри pop_bg_load — там initgraph давно позади. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -96,6 +96,17 @@ int pop_bg_load(uint8_t set) __banked
|
||||
return bg_load_tile_pal(pop_tile_pal[set]);
|
||||
}
|
||||
|
||||
/* Пере-применить палитру ТЕКУЩЕГО набора. Нужна отдельно от pop_bg_load
|
||||
* из-за порядка старта: атласы грузятся ДО initgraph (тот снимает
|
||||
* DSS-страницу W0), а общая игровая палитра kid.pal читается ПОСЛЕ него и
|
||||
* затирает слоты 0x50..0x6F — она собрана из VDUNGEON
|
||||
* (pop_pack_kid.py build_palette). Звать сразу за gfx_pal_fload. */
|
||||
int pop_bg_pal_apply(void) __banked
|
||||
{
|
||||
if (bg_set == 0xFF) return -1;
|
||||
return bg_load_tile_pal(pop_tile_pal[bg_set]);
|
||||
}
|
||||
|
||||
void pop_bg_free(void) __banked
|
||||
{
|
||||
int i;
|
||||
|
||||
Reference in New Issue
Block a user