Таблица рекордов на титрах проявляется собранной
Строки дорисовывались уже после полосового перехода: он копирует страницу акселератором, а тот читает ОЗУ-копию, куда GFX_BANK_SPRITE (NOSHADOW + TRANSPARENT) не пишет. Банк GFX_BANK_TRANSPARENT даёт ту же прозрачность 0xFF, но обновляет и копию, поэтому страницу можно собрать целиком до показа — как offscreen оригинала (draw_full_image + show_hof, и только потом transition_ltr). Проверено в MAME: на промежуточных кадрах перехода строка рекорда видна в уже проявившейся части экрана вместе с логотипом. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3589,10 +3589,11 @@ FIRST_LEVEL`. Рестарт ТОГО ЖЕ уровня (смерть, чекп
|
|||||||
титры.
|
титры.
|
||||||
|
|
||||||
**Грабля, которая стоила отладки.** Переход копирует страницу
|
**Грабля, которая стоила отладки.** Переход копирует страницу
|
||||||
акселератором, а тот читает ОЗУ-копию — прозрачный (спрайтовый) блит туда не
|
акселератором, а тот читает ОЗУ-копию. `GFX_BANK_SPRITE` (NOSHADOW +
|
||||||
пишет. Всё, что нарисовано текстом, обязано рисоваться ПОСЛЕ перехода, иначе
|
TRANSPARENT) в неё не пишет, поэтому переезжал один фон без текста (так вышла
|
||||||
переезжает только фон (так вышла пустая таблица рекордов, см.
|
пустая таблица рекордов, см. [HOF-ENTRY](TASKS_CLOSED.md#hof-entry)). Всё,
|
||||||
[HOF-ENTRY](TASKS_CLOSED.md#hof-entry)).
|
что должно проявляться ВМЕСТЕ с фоном, рисовать банком
|
||||||
|
`GFX_BANK_TRANSPARENT` — прозрачность та же, но копия обновляется.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1344,9 +1344,11 @@ make-бита для кода `0x6C`. Скратч-байты — хвост `o
|
|||||||
`POP_FONT_COLOR`) в ней ЧЁРНАЯ. Текст рисовался, но был не виден.
|
`POP_FONT_COLOR`) в ней ЧЁРНАЯ. Текст рисовался, но был не виден.
|
||||||
Теперь генератор кладёт в 0x3F золотой 0xB7 оригинала.
|
Теперь генератор кладёт в 0x3F золотой 0xB7 оригинала.
|
||||||
2. Полосовой переход копирует страницу АКСЕЛЕРАТОРОМ, а тот читает ОЗУ-копию
|
2. Полосовой переход копирует страницу АКСЕЛЕРАТОРОМ, а тот читает ОЗУ-копию
|
||||||
(`gfx_copy_page`: «копируется чистый фон без спрайтов»), куда прозрачный
|
(`gfx_copy_page`: «копируется чистый фон без спрайтов»). `GFX_BANK_SPRITE`
|
||||||
блит текста не пишет. Поэтому на титрах фон переезжал, а строки — нет.
|
— это NOSHADOW + TRANSPARENT, то есть в копию он не пишет, и на титрах
|
||||||
Строки теперь рисуются ПОСЛЕ перехода, прямо в видимую страницу.
|
переезжал один фон без строк. Лечится банком `GFX_BANK_TRANSPARENT`
|
||||||
|
(0x58): та же прозрачность 0xFF, но с записью в копию — страница
|
||||||
|
собирается ЦЕЛИКОМ до показа, как offscreen оригинала.
|
||||||
|
|
||||||
**Что появилось попутно.**
|
**Что появилось попутно.**
|
||||||
|
|
||||||
|
|||||||
@@ -285,16 +285,18 @@ static void hof_edit_bar(uint8_t row)
|
|||||||
bar(HOF_EDIT_LEFT, top, HOF_EDIT_RIGHT, top + HOF_ROW_H - 1);
|
bar(HOF_EDIT_LEFT, top, HOF_EDIT_RIGHT, top + HOF_ROW_H - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Строки таблицы в ТЕКУЩУЮ draw-страницу. Отделены от фона потому, что
|
/* Строки таблицы в ТЕКУЩУЮ draw-страницу.
|
||||||
* полосовой переход НЕ ПЕРЕНОСИТ их: gfx_copy_page работает акселератором,
|
*
|
||||||
* а тот читает ОЗУ-копию страницы, куда прозрачный (спрайтовый) блит не
|
* БАНК ЗДЕСЬ TRANSPARENT, А НЕ SPRITE. Полосовой переход копирует страницу
|
||||||
* пишет. Поэтому на титрах строки рисуются уже после перехода, прямо в
|
* акселератором, а тот читает ОЗУ-копию (gfx_copy_page); SPRITE — это
|
||||||
* видимую страницу. */
|
* NOSHADOW + TRANSPARENT, то есть в копию он не пишет, и на титрах
|
||||||
|
* переезжал бы один фон без строк. TRANSPARENT даёт ту же прозрачность
|
||||||
|
* 0xFF, но обновляет и копию, поэтому таблица проявляется уже собранной. */
|
||||||
static void hof_draw_rows(uint8_t edit_row)
|
static void hof_draw_rows(uint8_t edit_row)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
gfx_set_bank(GFX_BANK_SPRITE);
|
gfx_set_bank(GFX_BANK_TRANSPARENT);
|
||||||
pop_text_map();
|
pop_text_map();
|
||||||
for (i = 0; i < HOF_COUNT; i++) {
|
for (i = 0; i < HOF_COUNT; i++) {
|
||||||
char value[12];
|
char value[12];
|
||||||
@@ -333,7 +335,7 @@ static void hof_edit_draw(uint8_t row, const char *name, uint8_t cursor)
|
|||||||
|
|
||||||
gfx_set_draw_page(gfx_get_visible_page());
|
gfx_set_draw_page(gfx_get_visible_page());
|
||||||
hof_edit_bar(row);
|
hof_edit_bar(row);
|
||||||
gfx_set_bank(GFX_BANK_SPRITE);
|
gfx_set_bank(GFX_BANK_TRANSPARENT);
|
||||||
pop_text_map();
|
pop_text_map();
|
||||||
/* Тёмный набор: на золотой полосе оригинал пишет цветом 0xBE. */
|
/* Тёмный набор: на золотой полосе оригинал пишет цветом 0xBE. */
|
||||||
if (name[0]) {
|
if (name[0]) {
|
||||||
@@ -518,12 +520,11 @@ uint8_t pop_hof_show_title(void) __banked
|
|||||||
hof_load();
|
hof_load();
|
||||||
if (!hof_has_entries()) return 0;
|
if (!hof_has_entries()) return 0;
|
||||||
page = pop_screen_begin();
|
page = pop_screen_begin();
|
||||||
/* Ни fade, ни смены палитры: экран проявляется полосами прямо поверх
|
/* Страница собирается ЦЕЛИКОМ до показа — как offscreen оригинала:
|
||||||
* credits, на той же story.pal (seg000:2063). Переход несёт ТОЛЬКО
|
* draw_full_image + show_hof, и только потом transition_ltr
|
||||||
* фон — строки дорисовываются следом в видимую страницу. */
|
* (seg000:2063). Ни fade, ни смены палитры: экран проявляется прямо
|
||||||
if (pop_intro_hof_bg(page) != 0) return 0;
|
* поверх credits, на той же story.pal. */
|
||||||
|
if (hof_page_build(page, HOF_NO_ROW) != 0) return 0;
|
||||||
pop_screen_present_ltr();
|
pop_screen_present_ltr();
|
||||||
gfx_set_draw_page(gfx_get_visible_page());
|
|
||||||
hof_draw_rows(HOF_NO_ROW);
|
|
||||||
return hof_wait_frames(HOF_TITLE_TICKS);
|
return hof_wait_frames(HOF_TITLE_TICKS);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user