Звуковые эффекты PoP: оцифровка оригинала через CBL
Набор digisnd1..3.dat приведён упаковщиком к 10 937,5 Гц (частота железа), склеен в 8 EMM-страниц с выравниванием каждого звука на 128 — размер блока запроса CBL, поэтому ни один блок не пересекает границу страницы и проигрыватель не знает слова «стык». Насос (pop_sfx.c) резидентный: его зовут из прерывания CBL, из горячих мест физики и из play_seq. Тишину льём свою (первый блок набора), а не через CBL_UNDERRUN_SILENCE с его malloc — куча в резиденте W2 тесная. Открытие CBL разведено с загрузкой (pop_sfx_start отдельно от pop_sfx_init): пока ESTEX читает файлы, насос не успевает долить блок и железо крутит хвост буфера — на слух скрежет. Разведены все места play_sound() SDLPoP, у которых есть оцифровка (id 0..23, 44..49): посадки, падение, удары о стену, зацеп, тряска и провал плит, ворота, дверь уровня, пики, чомпер, кнопки, боёвка, меч, зеркало, скелет, зелье. Таблица соответствий — docs/sound_plan.md §8. Музыкальные id остаются с нулевой длиной до фазы музыки. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -66,6 +66,10 @@ uint8_t pop_dbg_roomnav(uint8_t dir) __banked;
|
||||
* звать можно каждый кадр. */
|
||||
void pop_dbg_room_label(uint8_t room) __banked;
|
||||
|
||||
/* Читы по фронту нажатия (K/I/S/Shift+L/U/[/]). В банке: раз в кадр,
|
||||
* а резидент W1/W2 переполнен — см. шапку функции. */
|
||||
void pop_cheat_tick(void) __banked;
|
||||
|
||||
/* Кто рисуется ПОЗЖЕ — Кид или соперник (порядок обхода тайлов оригинала,
|
||||
* set_objtile_at_char + sort_curr_objs). 1 = соперник поверх. Зовётся раз
|
||||
* в кадр, поэтому живёт в банке: трамплин на кадр дешевле полукилобайта
|
||||
|
||||
Reference in New Issue
Block a user