Финальная тема won: кольцевой стриминг с диска
Последний неозвученный кусок игры. 115 секунд и 1,2 МБ в память не влезают никак, поэтому тема играется кольцом из шести страниц (96 КБ = 9 с): насос идёт по кругу, а pop_music_service дочитывает файл в те страницы, которые насос уже прошёл. Страница звучит 1,5 с и читается 33 мс — запас сорокакратный; дистанция считается без отдельных счётчиков, потому что страница это ровно 128 блоков насоса. Три вещи, всплывшие при живой проверке: - кольцо обязано сниматься при любом обычном запуске трека, иначе следующая тема играет по кругу первых шести страниц (поймано на титрах сразу после победы); - живые сцены комнаты принцессы теперь открывают CBL сами (cut_begin): pop_ending_show глушит звук первым действием, и «arrived to princess» не звучал вовсе; - тема дослушивается до конца с возможностью прервать клавишей — как seg001:637. У оригинала там стоит ввод имени в таблицу рекордов; когда он появится, ожидание переедет за него (задача HOF-ENTRY). Проверено в MAME на сборке LEVEL=14: после встречи с принцессой звучит тема победы (id 56, кольцо 6), курсор уходит далеко за размер кольца — подкачка успевает. Host-тесты: 15 наборов. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,9 +12,9 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define POP_MUS_COUNT 56
|
||||
#define POP_MUS_COUNT 57
|
||||
#define POP_MUS_BLOCK 128
|
||||
#define POP_MUS_MAX_PAGES 20
|
||||
#define POP_MUS_MAX_PAGES 78
|
||||
|
||||
typedef struct {
|
||||
uint8_t pages; /* 0 — трека нет */
|
||||
@@ -78,6 +78,7 @@ static const pop_mus_ent_t pop_mus_tbl[POP_MUS_COUNT] = {
|
||||
{ 11, 1403 }, /* 53 story_3_Jaffar_enters */
|
||||
{ 17, 2064 }, /* 54 intro_theme */
|
||||
{ 11, 1350 }, /* 55 story_1_absence */
|
||||
{ 78, 9865 }, /* 56 won */
|
||||
};
|
||||
|
||||
#endif /* POP_MUSIC_TBL_H */
|
||||
|
||||
Reference in New Issue
Block a user