Ctrl+S — вкл/выкл звук; чит «выдать меч» убран
Порт Ctrl+S из SDLPoP (seg000:657). Выключение реально закрывает CBL, а не глушит сэмпл: иначе насос продолжал бы отдавать блоки тишины и платить те же 3,26 % процессорного времени. Флаг намерения pop_snd_want отдельно от pop_snd_ok: последний гасит служебная пауза на время загрузки уровня, и правь Ctrl+S только его — первая же смена уровня вернула бы выключенный звук. Индикация: пурпурная палочка в борте, когда звука НЕТ (включённый слышно и так, а молчание неотличимо от «нечему звучать»). Чит S «выдать меч» был отладочным и больше не нужен — снят, клавиша ушла под звук. Замер цены звука — sound_plan.md §9: 8 001 такт на прерывание при периоде 245 759 (3,26 % времени), +2,2 % к работе кадра в сцене 11/15, период кадра не сдвинулся ни разу. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -38,6 +38,17 @@ void pop_sfx_pause(void) __banked;
|
||||
/* Закрыть CBL и отпустить страницы; звать на выходе. */
|
||||
void pop_sfx_close(void) __banked;
|
||||
|
||||
/* Вкл/выкл звук по воле пользователя (Ctrl+S, порт SDLPoP seg000:657).
|
||||
* Правит pop_snd_want и приводит вывод в соответствие. */
|
||||
void pop_sfx_toggle(void) __banked;
|
||||
|
||||
/* ХОЧЕТ ЛИ ЗВУКА ПОЛЬЗОВАТЕЛЬ. Не то же самое, что «CBL открыт»: вывод
|
||||
* ещё гасит служебная пауза на время загрузки уровня. Читать для
|
||||
* индикации; писать — только через pop_sfx_toggle. 0 и в случае, когда
|
||||
* набор вообще не поднялся (нет файлов, нет страниц) — то есть флаг
|
||||
* честно means «звука не будет». */
|
||||
extern uint8_t pop_snd_want;
|
||||
|
||||
/* Начать эффект с номером id (0..56 — нумерация оригинала, см.
|
||||
* sound_plan.md). Перебивает играющий. У звуков без оцифровки (это
|
||||
* музыка) длина 0 — вызов просто глушит текущий.
|
||||
|
||||
Reference in New Issue
Block a user