SprPoP: Restart Game возвращал заставку без музыки и вешал её на титуле
pop_boot_sound() был целиком под разовым флагом, а pop_sfx_start() стоял внутри него. До перестановки старта CBL открывал сам шаг 0 титров, и делал это КАЖДЫЙ раз; теперь второй вызов уходил по раннему return, а pop_title_show начинается с pop_sfx_pause() — значит после Restart Game насос оставался выключенным и заставка шла молча. Тем же корнем объясняется зависание: с закрытым CBL курсор трека не двигается, pop_mus_left не убывает, и ожидания «дослушать тему» в титрах и интро (while (pop_music_busy())) висели до нажатия клавиши — на экране Prince of Persia. - pop_boot_sound: под разовым флагом осталась только ЗАГРУЗКА (индекс звука, первая страница набора, индекс музыки, settings_apply); pop_sfx_start() зовётся всегда — он идемпотентен и уважает Ctrl+S; - pop_music_busy(): признак теперь «звучит», а не «есть курсор» — спрашивает и про открытый вывод (pop_snd_ok). Ждать неиграющую музыку нельзя в принципе, и эта строка закрывает весь класс подвисаний. Проверено в MAME: уровень 1 -> ESC -> RESTART GAME -> титул с музыкой (pop_snd_ok=1, курсор трека прошёл страницы 8..16, pop_mus_id=54), дальше последовательность сама уходит в сцену с принцессой. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DSYUpuaQpKr48kBav2iiV4
This commit is contained in:
@@ -1205,14 +1205,23 @@ int pop_boot(void) __banked
|
||||
* полсекунды, и лучше, чтобы она прошла под картинкой. */
|
||||
int pop_boot_sound(void) __banked
|
||||
{
|
||||
if (boot_sound_done) return 0;
|
||||
boot_sound_done = 1;
|
||||
(void)pop_sfx_init_begin(); /* эффектов может и не быть — не фатально */
|
||||
/* Индекс музыкального набора — одна страница EMM. Без него музыки не
|
||||
* будет (pop_music_info вернёт -1 на любой трек), но игра работает:
|
||||
* это необязательный ресурс, как и сами треки. */
|
||||
(void)pop_music_index_load();
|
||||
pop_settings_apply(1); /* CFG -> speed/cheats/CBL */
|
||||
if (!boot_sound_done) {
|
||||
boot_sound_done = 1;
|
||||
(void)pop_sfx_init_begin(); /* эффектов может и не быть — не фатально */
|
||||
/* Индекс музыкального набора — одна страница EMM. Без него музыки не
|
||||
* будет (pop_music_info вернёт -1 на любой трек), но игра работает:
|
||||
* это необязательный ресурс, как и сами треки. */
|
||||
(void)pop_music_index_load();
|
||||
pop_settings_apply(1); /* CFG -> speed/cheats/CBL */
|
||||
}
|
||||
/* ОТКРЫТИЕ CBL — ВНЕ РАЗОВОГО ГАРДА, и это не мелочь. Загрузка нужна
|
||||
* один раз за запуск, а вот вывод к моменту следующего показа заставки
|
||||
* почти наверняка закрыт: pop_title_show начинается с pop_sfx_pause, да
|
||||
* и уровень оставляет CBL закрытым. Пока start стоял под флагом,
|
||||
* Restart Game приводил к заставке БЕЗ музыки (поймано пользователем
|
||||
* 2026-09-02), а заодно подвешивал ожидания «дослушать тему»: с
|
||||
* выключенным насосом pop_mus_left не убывает, и pop_music_busy()
|
||||
* истинен вечно. Идемпотентно и уважает Ctrl+S (pop_snd_want). */
|
||||
(void)pop_sfx_start();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user