Музыка звучала там, где оригинал играет эффекты
Три места, все — наши заявки на треки, поставленные без условий оригинала. Вступление первого уровня (25) оказалось не «звуком при приседе», а автоматом (seg005:02EB): пока need_level1_music не ноль, control_crouched НЕ читает управление — Кид сидит, играет тема, и только когда она смолкла, он встаёт. Мы играли трек при любом первом приседе, и тема догоняла игрока посреди уровня: пробежал, спрыгнул, присел — заиграла. Теперь автомат портирован целиком, а «ещё звучит» спрашивается у курсора насоса pop_mus_left (если музыка выключена, курсор нулевой и Кид просто встаёт). Демо-уровень: оригинал молчит музыкой и там, где играет её в игре. Смерть Кида — прямое условие `current_level != 0 && != 15` (seg006:1366), убитый страж — отдельная ветка «беги из комнаты» без звука (seg006:1929). Плюс общий гейт в pop_music_service: заставочная демка озвучена одними эффектами, и любой новый музыкальный повод (меч, зелье) звучал бы там, где оригинал их не играет. Гейт живёт в банке, а не в главном цикле: в резиденте W1 оставалось 27 байт. Host-тесты: 15 наборов. Проверено в MAME: на старте первого уровня тема 25 отыгрывает целиком, курсор доходит до нуля. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include "pop_music.h"
|
||||
#include "pop_music_tbl.h"
|
||||
#include "pop_sfx.h"
|
||||
#include "pop_app.h" /* POP_APP_DEMO — в демке музыки нет */
|
||||
|
||||
uint8_t pop_mus_page[POP_MUS_PAGES];
|
||||
|
||||
@@ -219,7 +220,12 @@ void pop_music_service(void) __banked
|
||||
/* Один вызов на кадр из ЛЮБОГО цикла — игрового, интро, катсцены.
|
||||
* Заявку кладёт pop_sfx_play (звук без оцифровки = музыка оригинала),
|
||||
* а диск трогаем только здесь. */
|
||||
if (!pop_mus_want) {
|
||||
/* В ЗАСТАВОЧНОЙ ДЕМКЕ МУЗЫКИ НЕТ. Точечные условия оригинала (смерть,
|
||||
* убитый страж) расставлены по своим местам, но гейт нужен и общий:
|
||||
* демо проигрывает записанные нажатия, и любой музыкальный повод —
|
||||
* подобранный меч, зелье — зазвучал бы там, где оригинал играет одни
|
||||
* эффекты. */
|
||||
if (!pop_mus_want || pop_app_state == POP_APP_DEMO) {
|
||||
/* Выключили на ходу: оборвать поток и замолчать. Эффекты при этом
|
||||
* продолжают звучать — у них свой тумблер. */
|
||||
if (pop_mus_req) pop_mus_req = 0;
|
||||
|
||||
Reference in New Issue
Block a user