Музыка звучала там, где оригинал играет эффекты
Три места, все — наши заявки на треки, поставленные без условий оригинала. Вступление первого уровня (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:
@@ -869,6 +869,7 @@ EMM: `pop_music_load*` всегда пишет в НЕ играющий, `pop_mu
|
||||
|------|---------|-------------|
|
||||
| 24 / 28 / 32 | смерть: обычная / в бою / от руки тени | `ctrl_kid_death` |
|
||||
| 25 | вступление 1-го уровня (Кид сидит), тень 6-го | `control_crouched`, `guards.c` |
|
||||
| — | НА ДЕМО-УРОВНЕ музыки нет вовсе: там одни эффекты | гейт в `pop_music_service` |
|
||||
| 27 / 35 / 40 | сцены перед 2/4/6/12, 8/9, «времени мало» | `pop_pre_cutscene_show` |
|
||||
| 29 | встреча с Джафаром | `pop_meet_jaffar` |
|
||||
| 30 / 33 | большая склянка / малая | `pop_proc_get_object` |
|
||||
@@ -878,6 +879,14 @@ EMM: `pop_music_load*` всегда пишет в НЕ играющий, `pop_mu
|
||||
| 41 / 32 | конец уровня / конец 4-го (тень) | опкод SND_LEVEL в `play_seq` |
|
||||
| 26 | встреча с принцессой | `cut_ending` |
|
||||
|
||||
**Вступление первого уровня — автомат, а не «звук при приседе»** (seg005:02EB).
|
||||
Пока `need_level1_music` не ноль, `control_crouched` НЕ ЧИТАЕТ управление:
|
||||
Кид сидит, тема играет, и лишь когда она смолкла, он может встать. Наша
|
||||
первая версия просто играла трек при первом приседе — и тема догоняла
|
||||
игрока посреди уровня (пробежал, спрыгнул, присел — заиграла). Признак
|
||||
«ещё звучит» берём у курсора насоса `pop_mus_left`: он резидентный, и если
|
||||
музыка выключена, курсор остаётся нулём — Кид просто встаёт.
|
||||
|
||||
Темы, которые звучат один раз за заход на уровень (вступление 1-го, тень
|
||||
6-го), сбрасывает `pop_music_level_start()` из `pop_start_level`. Оригинал
|
||||
для этого портит переменную двери (`leveldoor_open = 0x4D`) — у нас на это
|
||||
|
||||
Reference in New Issue
Block a user