SprPoP: трек заставки переживает загрузку уровня — порядок как в оригинале
ЗАМЕР (MAME, 2026-08-28). Брейк на pop_sfx_fill с печатью totalcycles, 500 подряд вызовов насоса через всю загрузку уровня 1->2 под звучащий трек 27: медиана интервала 245 760 тактов, максимум 245 832 при дедлайне 251 000 (11,7 мс) — НИ ОДНОЙ пропущенной порции. Загрузка уровня насос не морит. Поэтому снята двойная заплатка: * pop_level_switch больше не глушит насос перед pop_level_load_num; * pre_cut_finish больше не досиживает трек на чёрном экране (это делалось только чтобы глушение не обрубило его на полуслове; ценой были ~8 секунд пустого экрана — трек 27 длиннее сцены: 10,7 с против 2,6 с). Взамен восстановлен порядок оригинала (seg003:68-108, play_level): катсцена возвращает управление сразу -> уровень грузится ПОД музыку -> ожидание конца трека на чёрном экране (порт `while (check_sound_playing())` + stop_sounds) -> показ уровня. Общая чернота теперь max(трек, загрузка), а не их сумма, и трек не обрывается. Ожидание со страховкой на ~20 с, чтобы потоковый трек не подвесил переход. Пропуск сцены по-прежнему обрывает музыку — как и было. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1765,15 +1765,21 @@ uint8_t pop_intro_show(void) __banked
|
||||
* дальше, а не чтобы досидеть до конца трека. */
|
||||
static void pre_cut_finish(uint8_t aborted)
|
||||
{
|
||||
if (!aborted) {
|
||||
intro_skip_t tail;
|
||||
|
||||
intro_skip_begin(&tail);
|
||||
while (pop_music_busy() && !intro_skip_requested(&tail))
|
||||
pop_wait_edge();
|
||||
/* ТРЕК ПЕРЕЖИВАЕТ СЦЕНУ — как в оригинале. load_intro (seg001:690)
|
||||
* ничего не ждёт: гасит экран и возвращает управление, а звук играет
|
||||
* дальше поверх загрузки уровня и первых секунд игры. Мы вместо этого
|
||||
* ДОСИЖИВАЛИ трек на чёрном экране (27 — 10,7 с против 2,6 с картинки),
|
||||
* то есть дарили игроку восемь секунд пустого экрана, и только потом
|
||||
* глушили. ЗАМЕР 2026-08-28: снято вместе с глушением на загрузке
|
||||
* уровня; если загрузка не укладывается в дедлайн насоса (251 000
|
||||
* тактов), вернуть оба места разом.
|
||||
*
|
||||
* Пропуск сцены по-прежнему обрывает и музыку: игрок нажал клавишу,
|
||||
* чтобы идти дальше, а не чтобы дослушать. */
|
||||
if (aborted) {
|
||||
pop_music_free();
|
||||
pop_sfx_pause();
|
||||
}
|
||||
pop_music_free();
|
||||
pop_sfx_pause();
|
||||
intro_restore_game_palette();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user