mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-28 15:56:51 +00:00
Document Sequence Modes and Related Functions (#1046)
* Document Audio_SetSequenceMode * Cleanup surrounding docs * format * Clean-up * fix capital `I` in `playeridx` * Dist -> DistSq * `SetCamModeAndSeqMode` -> `UpdateCamAndSeqModes` * Get rid of extra padding * PR Feedback
This commit is contained in:
parent
e635e34265
commit
79220ba58a
8 changed files with 265 additions and 131 deletions
|
@ -2060,8 +2060,8 @@ void func_800F5BF0(u8 arg0);
|
||||||
void Audio_PlayFanfare(u16);
|
void Audio_PlayFanfare(u16);
|
||||||
void func_800F5C2C(void);
|
void func_800F5C2C(void);
|
||||||
void func_800F5E18(u8 playerIdx, u16 seqId, u8 fadeTimer, s8 arg3, s8 arg4);
|
void func_800F5E18(u8 playerIdx, u16 seqId, u8 fadeTimer, s8 arg3, s8 arg4);
|
||||||
void func_800F5E90(u8);
|
void Audio_SetSequenceMode(u8 seqMode);
|
||||||
void func_800F6114(f32 dist);
|
void Audio_SetBgmEnemyVolume(f32 dist);
|
||||||
void func_800F6268(f32 dist, u16);
|
void func_800F6268(f32 dist, u16);
|
||||||
void func_800F64E0(u8 arg0);
|
void func_800F64E0(u8 arg0);
|
||||||
void func_800F6584(u8 arg0);
|
void func_800F6584(u8 arg0);
|
||||||
|
|
|
@ -7,17 +7,17 @@
|
||||||
#define NA_BGM_NATURE_AMBIENCE 0x1 // Environmental nature background sounds
|
#define NA_BGM_NATURE_AMBIENCE 0x1 // Environmental nature background sounds
|
||||||
#define NA_BGM_FIELD_LOGIC 0x2 // Hyrule Field
|
#define NA_BGM_FIELD_LOGIC 0x2 // Hyrule Field
|
||||||
#define NA_BGM_FIELD_INIT 0x3 // Hyrule Field Initial Segment From Loading Area
|
#define NA_BGM_FIELD_INIT 0x3 // Hyrule Field Initial Segment From Loading Area
|
||||||
#define NA_BGM_FIELD_MOVE_1 0x4 // Hyrule Field Moving Segment 1
|
#define NA_BGM_FIELD_DEFAULT_1 0x4 // Hyrule Field Moving Segment 1
|
||||||
#define NA_BGM_FIELD_MOVE_2 0x5 // Hyrule Field Moving Segment 2
|
#define NA_BGM_FIELD_DEFAULT_2 0x5 // Hyrule Field Moving Segment 2
|
||||||
#define NA_BGM_FIELD_MOVE_3 0x6 // Hyrule Field Moving Segment 3
|
#define NA_BGM_FIELD_DEFAULT_3 0x6 // Hyrule Field Moving Segment 3
|
||||||
#define NA_BGM_FIELD_MOVE_4 0x7 // Hyrule Field Moving Segment 4
|
#define NA_BGM_FIELD_DEFAULT_4 0x7 // Hyrule Field Moving Segment 4
|
||||||
#define NA_BGM_FIELD_MOVE_5 0x8 // Hyrule Field Moving Segment 5
|
#define NA_BGM_FIELD_DEFAULT_5 0x8 // Hyrule Field Moving Segment 5
|
||||||
#define NA_BGM_FIELD_MOVE_6 0x9 // Hyrule Field Moving Segment 6
|
#define NA_BGM_FIELD_DEFAULT_6 0x9 // Hyrule Field Moving Segment 6
|
||||||
#define NA_BGM_FIELD_MOVE_7 0x0A // Hyrule Field Moving Segment 7
|
#define NA_BGM_FIELD_DEFAULT_7 0x0A // Hyrule Field Moving Segment 7
|
||||||
#define NA_BGM_FIELD_MOVE_8 0x0B // Hyrule Field Moving Segment 8
|
#define NA_BGM_FIELD_DEFAULT_8 0x0B // Hyrule Field Moving Segment 8
|
||||||
#define NA_BGM_FIELD_MOVE_9 0x0C // Hyrule Field Moving Segment 9
|
#define NA_BGM_FIELD_DEFAULT_9 0x0C // Hyrule Field Moving Segment 9
|
||||||
#define NA_BGM_FIELD_MOVE_A 0x0D // Hyrule Field Moving Segment 10
|
#define NA_BGM_FIELD_DEFAULT_A 0x0D // Hyrule Field Moving Segment 10
|
||||||
#define NA_BGM_FIELD_MOVE_B 0x0E // Hyrule Field Moving Segment 11
|
#define NA_BGM_FIELD_DEFAULT_B 0x0E // Hyrule Field Moving Segment 11
|
||||||
#define NA_BGM_FIELD_ENEMY_INIT 0x0F // Hyrule Field Enemy Approaches
|
#define NA_BGM_FIELD_ENEMY_INIT 0x0F // Hyrule Field Enemy Approaches
|
||||||
#define NA_BGM_FIELD_ENEMY_1 0x10 // Hyrule Field Enemy Near Segment 1
|
#define NA_BGM_FIELD_ENEMY_1 0x10 // Hyrule Field Enemy Near Segment 1
|
||||||
#define NA_BGM_FIELD_ENEMY_2 0x11 // Hyrule Field Enemy Near Segment 2
|
#define NA_BGM_FIELD_ENEMY_2 0x11 // Hyrule Field Enemy Near Segment 2
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
#define NA_BGM_DOOR_OF_TIME 0x59 // Open Door of Temple of Time "NA_BGM_GATE_OPEN"
|
#define NA_BGM_DOOR_OF_TIME 0x59 // Open Door of Temple of Time "NA_BGM_GATE_OPEN"
|
||||||
#define NA_BGM_OWL 0x5A // Kaepora Gaebora's Theme
|
#define NA_BGM_OWL 0x5A // Kaepora Gaebora's Theme
|
||||||
#define NA_BGM_SHADOW_TEMPLE 0x5B // Shadow Temple "NA_BGM_DARKNESS_DUNGEON"
|
#define NA_BGM_SHADOW_TEMPLE 0x5B // Shadow Temple "NA_BGM_DARKNESS_DUNGEON"
|
||||||
#define NA_BGM_WATAER_TEMPLE 0x5C // Water Temple "NA_BGM_AQUA_DUNGEON"
|
#define NA_BGM_WATER_TEMPLE 0x5C // Water Temple "NA_BGM_AQUA_DUNGEON"
|
||||||
#define NA_BGM_BRIDGE_TO_GANONS 0x5D // Ganon's Castle Bridge "NA_BGM_BRIDGE"
|
#define NA_BGM_BRIDGE_TO_GANONS 0x5D // Ganon's Castle Bridge "NA_BGM_BRIDGE"
|
||||||
#define NA_BGM_OCARINA_OF_TIME 0x5E // Ocarina of Time "NA_BGM_SARIA"
|
#define NA_BGM_OCARINA_OF_TIME 0x5E // Ocarina of Time "NA_BGM_SARIA"
|
||||||
#define NA_BGM_GERUDO_VALLEY 0x5F // Gerudo Valley "NA_BGM_GERUDO"
|
#define NA_BGM_GERUDO_VALLEY 0x5F // Gerudo Valley "NA_BGM_GERUDO"
|
||||||
|
@ -124,4 +124,11 @@ typedef enum {
|
||||||
/* 3 */ SEQ_PLAYER_BGM_SUB
|
/* 3 */ SEQ_PLAYER_BGM_SUB
|
||||||
} SequencePlayerId;
|
} SequencePlayerId;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* 0 */ SEQ_MODE_DEFAULT,
|
||||||
|
/* 1 */ SEQ_MODE_ENEMY,
|
||||||
|
/* 2 */ SEQ_MODE_STILL, // Not moving or first-person view
|
||||||
|
/* 3 */ SEQ_MODE_IGNORE
|
||||||
|
} SequenceMode;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -216,7 +216,7 @@ typedef struct {
|
||||||
/* 0x4D */ char unk_4D[0x03];
|
/* 0x4D */ char unk_4D[0x03];
|
||||||
/* 0x50 */ TargetContextEntry arr_50[3];
|
/* 0x50 */ TargetContextEntry arr_50[3];
|
||||||
/* 0x8C */ Actor* unk_8C;
|
/* 0x8C */ Actor* unk_8C;
|
||||||
/* 0x90 */ Actor* unk_90;
|
/* 0x90 */ Actor* bgmEnemy; // The nearest enemy to player with the right flags that will trigger NA_BGM_ENEMY
|
||||||
/* 0x94 */ Actor* unk_94;
|
/* 0x94 */ Actor* unk_94;
|
||||||
} TargetContext; // size = 0x98
|
} TargetContext; // size = 0x98
|
||||||
|
|
||||||
|
|
|
@ -121,27 +121,134 @@ s8 sAudioCutsceneFlag = 0;
|
||||||
s8 sSpecReverb = 0;
|
s8 sSpecReverb = 0;
|
||||||
s8 sAudioEnvReverb = 0;
|
s8 sAudioEnvReverb = 0;
|
||||||
s8 sAudioCodeReverb = 0;
|
s8 sAudioCodeReverb = 0;
|
||||||
u8 D_8013061C = 0;
|
u8 sPrevSeqMode = 0;
|
||||||
f32 sAudioEnemyDist = 0.0f;
|
f32 sAudioEnemyDist = 0.0f;
|
||||||
s8 sAudioEnemyVol = 127;
|
s8 sAudioEnemyVol = 127;
|
||||||
u16 D_80130628 = NA_BGM_DISABLED;
|
u16 D_80130628 = NA_BGM_DISABLED;
|
||||||
u8 D_8013062C = 0;
|
u8 D_8013062C = 0;
|
||||||
u8 D_80130630 = NA_BGM_GENERAL_SFX;
|
u8 D_80130630 = NA_BGM_GENERAL_SFX;
|
||||||
u32 D_80130634 = 0;
|
u32 sNumFramesStill = 0;
|
||||||
u32 D_80130638 = 0;
|
u32 sNumFramesMoving = 0;
|
||||||
u8 sAudioBaseFilter = 0;
|
u8 sAudioBaseFilter = 0;
|
||||||
u8 sAudioExtraFilter = 0;
|
u8 sAudioExtraFilter = 0;
|
||||||
u8 sAudioBaseFilter2 = 0;
|
u8 sAudioBaseFilter2 = 0;
|
||||||
u8 sAudioExtraFilter2 = 0;
|
u8 sAudioExtraFilter2 = 0;
|
||||||
Vec3f* sSariaBgmPtr = NULL;
|
Vec3f* sSariaBgmPtr = NULL;
|
||||||
f32 D_80130650 = 2000.0f;
|
f32 D_80130650 = 2000.0f;
|
||||||
u8 D_80130654 = 0;
|
u8 sSeqModeInput = 0;
|
||||||
u8 D_80130658[0x70] = {
|
u8 sSeqFlags[0x6E] = {
|
||||||
2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 16, 0, 136,
|
0x2, // NA_BGM_GENERAL_SFX
|
||||||
1, 0, 0, 32, 0, 0, 2, 4, 2, 2, 1, 16, 0, 0, 1, 2, 1, 0, 128, 0, 128, 0, 2, 2, 2, 2, 2, 2,
|
0x1, // NA_BGM_NATURE_BACKGROUND
|
||||||
136, 2, 0, 2, 17, 2, 1, 1, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 32, 0, 16, 2, 0, 0,
|
0, // NA_BGM_FIELD_LOGIC
|
||||||
4, 32, 64, 64, 1, 2, 2, 1, 1, 2, 0, 17, 0, 0, 128, 0, 128, 128, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
|
0, // NA_BGM_FIELD_INIT
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_1
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_2
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_3
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_4
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_5
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_6
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_7
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_8
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_9
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_A
|
||||||
|
0, // NA_BGM_FIELD_DEFAULT_B
|
||||||
|
0, // NA_BGM_FIELD_ENEMY_INIT
|
||||||
|
0, // NA_BGM_FIELD_ENEMY_1
|
||||||
|
0, // NA_BGM_FIELD_ENEMY_2
|
||||||
|
0, // NA_BGM_FIELD_ENEMY_3
|
||||||
|
0, // NA_BGM_FIELD_ENEMY_4
|
||||||
|
0, // NA_BGM_FIELD_STILL_1
|
||||||
|
0, // NA_BGM_FIELD_STILL_2
|
||||||
|
0, // NA_BGM_FIELD_STILL_3
|
||||||
|
0, // NA_BGM_FIELD_STILL_4
|
||||||
|
0x21, // NA_BGM_DUNGEON
|
||||||
|
0x10, // NA_BGM_KAKARIKO_ADULT
|
||||||
|
0, // NA_BGM_ENEMY
|
||||||
|
0x88, // NA_BGM_BOSS
|
||||||
|
0x1, // NA_BGM_INSIDE_DEKU_TREE
|
||||||
|
0, // NA_BGM_MARKET
|
||||||
|
0, // NA_BGM_TITLE
|
||||||
|
0x20, // NA_BGM_LINK_HOUSE
|
||||||
|
0, // NA_BGM_GAME_OVER
|
||||||
|
0, // NA_BGM_BOSS_CLEAR
|
||||||
|
0x2, // NA_BGM_ITEM_GET
|
||||||
|
0x4, // NA_BGM_OPENING_GANON
|
||||||
|
0x2, // NA_BGM_HEART_GET
|
||||||
|
0x2, // NA_BGM_OCA_LIGHT
|
||||||
|
0x1, // NA_BGM_JABU_JABU
|
||||||
|
0x10, // NA_BGM_KAKARIKO_KID
|
||||||
|
0, // NA_BGM_GREAT_FAIRY
|
||||||
|
0, // NA_BGM_ZELDA_THEME
|
||||||
|
0x1, // NA_BGM_FIRE_TEMPLE
|
||||||
|
0x2, // NA_BGM_OPEN_TRE_BOX
|
||||||
|
0x1, // NA_BGM_FOREST_TEMPLE
|
||||||
|
0, // NA_BGM_COURTYARD
|
||||||
|
0x80, // NA_BGM_GANON_TOWER
|
||||||
|
0, // NA_BGM_LONLON
|
||||||
|
0x80, // NA_BGM_GORON_CITY
|
||||||
|
0, // NA_BGM_FIELD_MORNING
|
||||||
|
0x2, // NA_BGM_SPIRITUAL_STONE
|
||||||
|
0x2, // NA_BGM_OCA_BOLERO
|
||||||
|
0x2, // NA_BGM_OCA_MINUET
|
||||||
|
0x2, // NA_BGM_OCA_SERENADE
|
||||||
|
0x2, // NA_BGM_OCA_REQUIEM
|
||||||
|
0x2, // NA_BGM_OCA_NOCTURNE
|
||||||
|
0x88, // NA_BGM_MINI_BOSS
|
||||||
|
0x2, // NA_BGM_SMALL_ITEM_GET
|
||||||
|
0, // NA_BGM_TEMPLE_OF_TIME
|
||||||
|
0x2, // NA_BGM_EVENT_CLEAR
|
||||||
|
0x11, // NA_BGM_KOKIRI
|
||||||
|
0x2, // NA_BGM_OCA_FAIRY_GET
|
||||||
|
0x1, // NA_BGM_SARIA_THEME
|
||||||
|
0x1, // NA_BGM_SPIRIT_TEMPLE
|
||||||
|
0, // NA_BGM_HORSE
|
||||||
|
0, // NA_BGM_HORSE_GOAL
|
||||||
|
0, // NA_BGM_INGO
|
||||||
|
0x2, // NA_BGM_MEDALLION_GET
|
||||||
|
0x2, // NA_BGM_OCA_SARIA
|
||||||
|
0x2, // NA_BGM_OCA_EPONA
|
||||||
|
0x2, // NA_BGM_OCA_ZELDA
|
||||||
|
0x2, // NA_BGM_OCA_SUNS
|
||||||
|
0x2, // NA_BGM_OCA_TIME
|
||||||
|
0x2, // NA_BGM_OCA_STORM
|
||||||
|
0, // NA_BGM_NAVI_OPENING
|
||||||
|
0, // NA_BGM_DEKU_TREE_CS
|
||||||
|
0, // NA_BGM_WINDMILL
|
||||||
|
0, // NA_BGM_HYRULE_CS
|
||||||
|
0x20, // NA_BGM_MINI_GAME
|
||||||
|
0, // NA_BGM_SHEIK
|
||||||
|
0x10, // NA_BGM_ZORA_DOMAIN
|
||||||
|
0x2, // NA_BGM_APPEAR
|
||||||
|
0, // NA_BGM_ADULT_LINK
|
||||||
|
0, // NA_BGM_MASTER_SWORD
|
||||||
|
0x4, // NA_BGM_INTRO_GANON
|
||||||
|
0x20, // NA_BGM_SHOP
|
||||||
|
0x40, // NA_BGM_CHAMBER_OF_SAGES
|
||||||
|
0x40, // NA_BGM_FILE_SELECT
|
||||||
|
0x1, // NA_BGM_ICE_CAVERN
|
||||||
|
0x2, // NA_BGM_DOOR_OF_TIME
|
||||||
|
0x2, // NA_BGM_OWL
|
||||||
|
0x1, // NA_BGM_SHADOW_TEMPLE
|
||||||
|
0x1, // NA_BGM_WATER_TEMPLE
|
||||||
|
0x2, // NA_BGM_BRIDGE_TO_GANONS
|
||||||
|
0, // NA_BGM_OCARINA_OF_TIME
|
||||||
|
0x11, // NA_BGM_GERUDO_VALLEY
|
||||||
|
0, // NA_BGM_POTION_SHOP
|
||||||
|
0, // NA_BGM_KOTAKE_KOUME
|
||||||
|
0x80, // NA_BGM_ESCAPE
|
||||||
|
0, // NA_BGM_UNDERGROUND
|
||||||
|
0x80, // NA_BGM_GANON_BATTLE_1
|
||||||
|
0x80, // NA_BGM_GANON_BATTLE_2
|
||||||
|
0, // NA_BGM_END_DEMO
|
||||||
|
0, // NA_BGM_STAFF_1
|
||||||
|
0, // NA_BGM_STAFF_2
|
||||||
|
0, // NA_BGM_STAFF_3
|
||||||
|
0, // NA_BGM_STAFF_4
|
||||||
|
0, // NA_BGM_FIRE_BOSS
|
||||||
|
0x8, // NA_BGM_MINI_GAME_2
|
||||||
|
0, // NA_BGM_VARIOUS_SFX
|
||||||
};
|
};
|
||||||
|
|
||||||
s8 sSpecReverbs[20] = { 0, 0, 0, 0, 0, 0, 0, 40, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
s8 sSpecReverbs[20] = { 0, 0, 0, 0, 0, 0, 0, 40, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
D_801306DC_s D_801306DC[20] = {
|
D_801306DC_s D_801306DC[20] = {
|
||||||
|
@ -1480,7 +1587,7 @@ f32 D_80131C8C = 0.0f;
|
||||||
|
|
||||||
// === Audio Debugging ===
|
// === Audio Debugging ===
|
||||||
|
|
||||||
// These variables come between in-function statics in func_800EE824 and func_800F510C
|
// These variables come between in-function statics in func_800EE824 and Audio_SplitBgmChannels
|
||||||
|
|
||||||
f32 sAudioUpdateDuration = 0.0f;
|
f32 sAudioUpdateDuration = 0.0f;
|
||||||
f32 sAudioUpdateDurationMax = 0.0f;
|
f32 sAudioUpdateDurationMax = 0.0f;
|
||||||
|
@ -2213,8 +2320,8 @@ void AudioDebug_Draw(GfxPrint* printer) {
|
||||||
GfxPrint_Printf(printer, "SOUND GAME FRAME MAX %f", sAudioUpdateDurationMax);
|
GfxPrint_Printf(printer, "SOUND GAME FRAME MAX %f", sAudioUpdateDurationMax);
|
||||||
|
|
||||||
GfxPrint_SetPos(printer, 3, 9);
|
GfxPrint_SetPos(printer, 3, 9);
|
||||||
GfxPrint_Printf(printer, "SWITCH BGM MODE %d %d %d (FLAG %d)", D_8013061C, D_80130634, D_80130638,
|
GfxPrint_Printf(printer, "SWITCH BGM MODE %d %d %d (FLAG %d)", sPrevSeqMode, sNumFramesStill,
|
||||||
D_80130654);
|
sNumFramesMoving, sSeqModeInput);
|
||||||
|
|
||||||
GfxPrint_SetPos(printer, 3, 10);
|
GfxPrint_SetPos(printer, 3, 10);
|
||||||
GfxPrint_Printf(printer, "ENEMY DIST %f VOL %3d", sAudioEnemyDist, sAudioEnemyVol);
|
GfxPrint_Printf(printer, "ENEMY DIST %f VOL %3d", sAudioEnemyDist, sAudioEnemyVol);
|
||||||
|
@ -2639,7 +2746,7 @@ void AudioDebug_ProcessInput_BlkChgBgm(void) {
|
||||||
if (CHECK_BTN_ANY(sDebugPadPress, BTN_DLEFT)) {
|
if (CHECK_BTN_ANY(sDebugPadPress, BTN_DLEFT)) {
|
||||||
sAudioBlkChgBgmWork[sAudioBlkChgBgmSel]--;
|
sAudioBlkChgBgmWork[sAudioBlkChgBgmSel]--;
|
||||||
if (sAudioBlkChgBgmSel == 1) {
|
if (sAudioBlkChgBgmSel == 1) {
|
||||||
func_800F5E90(sAudioBlkChgBgmWork[1]);
|
Audio_SetSequenceMode(sAudioBlkChgBgmWork[1]);
|
||||||
; // might be a fake match?
|
; // might be a fake match?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2647,7 +2754,7 @@ void AudioDebug_ProcessInput_BlkChgBgm(void) {
|
||||||
if (CHECK_BTN_ANY(sDebugPadPress, BTN_DRIGHT)) {
|
if (CHECK_BTN_ANY(sDebugPadPress, BTN_DRIGHT)) {
|
||||||
sAudioBlkChgBgmWork[sAudioBlkChgBgmSel]++;
|
sAudioBlkChgBgmWork[sAudioBlkChgBgmSel]++;
|
||||||
if (sAudioBlkChgBgmSel == 1) {
|
if (sAudioBlkChgBgmSel == 1) {
|
||||||
func_800F5E90(sAudioBlkChgBgmWork[1]);
|
Audio_SetSequenceMode(sAudioBlkChgBgmWork[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3248,7 +3355,7 @@ void Audio_ResetSfxChannelState(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
sSfxChannelState[SFX_PLAYER_CHANNEL_OCARINA].unk_0C = 0;
|
sSfxChannelState[SFX_PLAYER_CHANNEL_OCARINA].unk_0C = 0;
|
||||||
D_8013061C = 0;
|
sPrevSeqMode = 0;
|
||||||
sAudioCodeReverb = 0;
|
sAudioCodeReverb = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3609,39 +3716,48 @@ void Audio_ClearSariaBgmAtPos(Vec3f* pos) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_800F510C(s8 volSplit) {
|
/**
|
||||||
u8 vol;
|
* Turns on and off channels from both bgm players in a way that splits
|
||||||
u8 prio;
|
* equally between the two bgm channels. Split based on note priority
|
||||||
|
*/
|
||||||
|
void Audio_SplitBgmChannels(s8 volSplit) {
|
||||||
|
u8 volume;
|
||||||
|
u8 notePriority;
|
||||||
u16 channelBits;
|
u16 channelBits;
|
||||||
u8 players[2] = { SEQ_PLAYER_BGM_MAIN, SEQ_PLAYER_BGM_SUB };
|
u8 bgmPlayers[2] = { SEQ_PLAYER_BGM_MAIN, SEQ_PLAYER_BGM_SUB };
|
||||||
|
u8 channelIdx;
|
||||||
u8 i;
|
u8 i;
|
||||||
u8 j;
|
|
||||||
|
|
||||||
if ((func_800FA0B4(SEQ_PLAYER_FANFARE) == NA_BGM_DISABLED) &&
|
if ((func_800FA0B4(SEQ_PLAYER_FANFARE) == NA_BGM_DISABLED) &&
|
||||||
(func_800FA0B4(SEQ_PLAYER_BGM_SUB) != NA_BGM_LONLON)) {
|
(func_800FA0B4(SEQ_PLAYER_BGM_SUB) != NA_BGM_LONLON)) {
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < ARRAY_COUNT(bgmPlayers); i++) {
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
vol = volSplit;
|
// Main Bgm SeqPlayer
|
||||||
|
volume = volSplit;
|
||||||
} else {
|
} else {
|
||||||
vol = 0x7F - volSplit;
|
// Sub Bgm SeqPlayer
|
||||||
|
volume = 0x7F - volSplit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vol > 100) {
|
if (volume > 100) {
|
||||||
prio = 11;
|
notePriority = 11;
|
||||||
} else if (vol < 20) {
|
} else if (volume < 20) {
|
||||||
prio = 2;
|
notePriority = 2;
|
||||||
} else {
|
} else {
|
||||||
prio = ((vol - 20) / 10) + 2;
|
notePriority = ((volume - 20) / 10) + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
channelBits = 0;
|
channelBits = 0;
|
||||||
for (j = 0; j < 0x10; j++) {
|
for (channelIdx = 0; channelIdx < 16; channelIdx++) {
|
||||||
if (gAudioContext.seqPlayers[players[i]].channels[j]->notePriority < prio) {
|
if (notePriority > gAudioContext.seqPlayers[bgmPlayers[i]].channels[channelIdx]->notePriority) {
|
||||||
channelBits += (1 << j);
|
// If the note currently playing in the channel is a high enough priority,
|
||||||
|
// then keep the channel on by setting a channelBit
|
||||||
|
// If this condition fails, then the channel will be shut off
|
||||||
|
channelBits += (1 << channelIdx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Audio_SeqCmdA(players[i], channelBits);
|
Audio_SeqCmdA(bgmPlayers[i], channelBits);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3685,7 +3801,7 @@ void Audio_PlaySariaBgm(Vec3f* pos, u16 seqId, u16 distMax) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seqId != NA_BGM_GREAT_FAIRY) {
|
if (seqId != NA_BGM_GREAT_FAIRY) {
|
||||||
func_800F510C(vol);
|
Audio_SplitBgmChannels(vol);
|
||||||
}
|
}
|
||||||
|
|
||||||
Audio_SetVolScale(SEQ_PLAYER_BGM_SUB, 3, vol, 0);
|
Audio_SetVolScale(SEQ_PLAYER_BGM_SUB, 3, vol, 0);
|
||||||
|
@ -3711,7 +3827,7 @@ void func_800F5550(u16 seqId) {
|
||||||
Audio_QueueCmdS32(0xF8000000, 0);
|
Audio_QueueCmdS32(0xF8000000, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((D_80130658[D_80130630] & 0x20) && D_80130658[(seqId & 0xFF) & 0xFF] & 0x10) {
|
if ((sSeqFlags[D_80130630] & 0x20) && sSeqFlags[(seqId & 0xFF) & 0xFF] & 0x10) {
|
||||||
|
|
||||||
if ((D_8013062C & 0x3F) != 0) {
|
if ((D_8013062C & 0x3F) != 0) {
|
||||||
sp27 = 0x1E;
|
sp27 = 0x1E;
|
||||||
|
@ -3721,9 +3837,9 @@ void func_800F5550(u16 seqId) {
|
||||||
|
|
||||||
D_8013062C = 0;
|
D_8013062C = 0;
|
||||||
} else {
|
} else {
|
||||||
nv = (D_80130658[(seqId & 0xFF) & 0xFF] & 0x40) ? 1 : 0xFF;
|
nv = (sSeqFlags[(seqId & 0xFF) & 0xFF] & 0x40) ? 1 : 0xFF;
|
||||||
func_800F5E18(SEQ_PLAYER_BGM_MAIN, seqId, 0, 7, nv);
|
func_800F5E18(SEQ_PLAYER_BGM_MAIN, seqId, 0, 7, nv);
|
||||||
if (!(D_80130658[seqId] & 0x20)) {
|
if (!(sSeqFlags[seqId] & 0x20)) {
|
||||||
D_8013062C = 0xC0;
|
D_8013062C = 0xC0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3737,7 +3853,7 @@ void func_800F56A8(void) {
|
||||||
|
|
||||||
temp_v0 = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
temp_v0 = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
||||||
bvar = temp_v0 & 0xFF;
|
bvar = temp_v0 & 0xFF;
|
||||||
if ((temp_v0 != NA_BGM_DISABLED) && ((D_80130658[bvar] & 0x10) != 0)) {
|
if ((temp_v0 != NA_BGM_DISABLED) && (sSeqFlags[bvar] & 0x10)) {
|
||||||
if (D_8013062C != 0xC0) {
|
if (D_8013062C != 0xC0) {
|
||||||
D_8013062C = gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].soundScriptIO[3];
|
D_8013062C = gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].soundScriptIO[3];
|
||||||
} else {
|
} else {
|
||||||
|
@ -3770,9 +3886,9 @@ void func_800F5918(void) {
|
||||||
void func_800F595C(u16 arg0) {
|
void func_800F595C(u16 arg0) {
|
||||||
u8 arg0b = arg0 & 0xFF;
|
u8 arg0b = arg0 & 0xFF;
|
||||||
|
|
||||||
if (D_80130658[arg0b] & 2) {
|
if (sSeqFlags[arg0b] & 2) {
|
||||||
Audio_PlayFanfare(arg0);
|
Audio_PlayFanfare(arg0);
|
||||||
} else if (D_80130658[arg0b] & 4) {
|
} else if (sSeqFlags[arg0b] & 4) {
|
||||||
Audio_StartSeq(SEQ_PLAYER_FANFARE, 0, arg0);
|
Audio_StartSeq(SEQ_PLAYER_FANFARE, 0, arg0);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -3784,9 +3900,9 @@ void func_800F595C(u16 arg0) {
|
||||||
void func_800F59E8(u16 arg0) {
|
void func_800F59E8(u16 arg0) {
|
||||||
u8 arg0b = arg0 & 0xFF;
|
u8 arg0b = arg0 & 0xFF;
|
||||||
|
|
||||||
if (D_80130658[arg0b] & 2) {
|
if (sSeqFlags[arg0b] & 2) {
|
||||||
Audio_SeqCmd1(SEQ_PLAYER_FANFARE, 0);
|
Audio_SeqCmd1(SEQ_PLAYER_FANFARE, 0);
|
||||||
} else if (D_80130658[arg0b] & 4) {
|
} else if (sSeqFlags[arg0b] & 4) {
|
||||||
Audio_SeqCmd1(SEQ_PLAYER_FANFARE, 0);
|
Audio_SeqCmd1(SEQ_PLAYER_FANFARE, 0);
|
||||||
} else {
|
} else {
|
||||||
Audio_SeqCmd1(SEQ_PLAYER_BGM_MAIN, 0);
|
Audio_SeqCmd1(SEQ_PLAYER_BGM_MAIN, 0);
|
||||||
|
@ -3796,9 +3912,9 @@ void func_800F59E8(u16 arg0) {
|
||||||
s32 func_800F5A58(u8 arg0) {
|
s32 func_800F5A58(u8 arg0) {
|
||||||
u8 phi_a1 = 0;
|
u8 phi_a1 = 0;
|
||||||
|
|
||||||
if (D_80130658[arg0 & 0xFF] & 2) {
|
if (sSeqFlags[arg0 & 0xFF] & 2) {
|
||||||
phi_a1 = 1;
|
phi_a1 = 1;
|
||||||
} else if (D_80130658[arg0 & 0xFF] & 4) {
|
} else if (sSeqFlags[arg0 & 0xFF] & 4) {
|
||||||
phi_a1 = 1;
|
phi_a1 = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3814,7 +3930,7 @@ void func_800F5ACC(u16 seqId) {
|
||||||
|
|
||||||
temp_v0 = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
temp_v0 = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
||||||
if ((temp_v0 & 0xFF) != NA_BGM_GANON_TOWER && (temp_v0 & 0xFF) != NA_BGM_ESCAPE && temp_v0 != seqId) {
|
if ((temp_v0 & 0xFF) != NA_BGM_GANON_TOWER && (temp_v0 & 0xFF) != NA_BGM_ESCAPE && temp_v0 != seqId) {
|
||||||
func_800F5E90(3);
|
Audio_SetSequenceMode(SEQ_MODE_IGNORE);
|
||||||
if (temp_v0 != NA_BGM_DISABLED) {
|
if (temp_v0 != NA_BGM_DISABLED) {
|
||||||
D_80130628 = temp_v0;
|
D_80130628 = temp_v0;
|
||||||
} else {
|
} else {
|
||||||
|
@ -3826,7 +3942,7 @@ void func_800F5ACC(u16 seqId) {
|
||||||
|
|
||||||
void func_800F5B58(void) {
|
void func_800F5B58(void) {
|
||||||
if ((func_800FA0B4(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) && (D_80130628 != NA_BGM_DISABLED) &&
|
if ((func_800FA0B4(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) && (D_80130628 != NA_BGM_DISABLED) &&
|
||||||
(D_80130658[func_800FA0B4(SEQ_PLAYER_BGM_MAIN) & 0xFF] & 8)) {
|
(sSeqFlags[func_800FA0B4(SEQ_PLAYER_BGM_MAIN) & 0xFF] & 8)) {
|
||||||
if (D_80130628 == NA_BGM_DISABLED) {
|
if (D_80130628 == NA_BGM_DISABLED) {
|
||||||
Audio_SeqCmd1(SEQ_PLAYER_BGM_MAIN, 0);
|
Audio_SeqCmd1(SEQ_PLAYER_BGM_MAIN, 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -3908,77 +4024,83 @@ void func_800F5E18(u8 playerIdx, u16 seqId, u8 fadeTimer, s8 arg3, s8 arg4) {
|
||||||
Audio_StartSeq(playerIdx, fadeTimer, seqId);
|
Audio_StartSeq(playerIdx, fadeTimer, seqId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_800F5E90(u8 arg0) {
|
void Audio_SetSequenceMode(u8 seqMode) {
|
||||||
s32 phi_t0;
|
s32 volumeFadeInTimer;
|
||||||
u16 phi_t1;
|
u16 seqId;
|
||||||
u8 phi_a3;
|
u8 volumeFadeOutTimer;
|
||||||
|
|
||||||
D_80130654 = arg0;
|
sSeqModeInput = seqMode;
|
||||||
if (D_80130628 == NA_BGM_DISABLED) {
|
if (D_80130628 == NA_BGM_DISABLED) {
|
||||||
if (sAudioCutsceneFlag) {
|
if (sAudioCutsceneFlag) {
|
||||||
arg0 = 3;
|
seqMode = SEQ_MODE_IGNORE;
|
||||||
}
|
}
|
||||||
phi_t1 = D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254;
|
|
||||||
if (phi_t1 == NA_BGM_FIELD_LOGIC && func_800FA0B4(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) {
|
seqId = D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254;
|
||||||
arg0 = 3;
|
|
||||||
|
if (seqId == NA_BGM_FIELD_LOGIC && func_800FA0B4(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) {
|
||||||
|
seqMode = SEQ_MODE_IGNORE;
|
||||||
}
|
}
|
||||||
|
|
||||||
phi_a3 = phi_t1 & 0xFF;
|
if ((seqId == NA_BGM_DISABLED) || (sSeqFlags[(u8)(seqId & 0xFF)] & 1) ||
|
||||||
if ((phi_t1 == NA_BGM_DISABLED) || ((D_80130658[phi_a3] & 1) != 0) || ((D_8013061C & 0x7F) == 1)) {
|
((sPrevSeqMode & 0x7F) == SEQ_MODE_ENEMY)) {
|
||||||
if (arg0 != (D_8013061C & 0x7F)) {
|
if (seqMode != (sPrevSeqMode & 0x7F)) {
|
||||||
if (arg0 == 1) {
|
if (seqMode == SEQ_MODE_ENEMY) {
|
||||||
|
// Start playing enemy bgm
|
||||||
if (D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol < 0) {
|
if (D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol < 0) {
|
||||||
phi_t0 = -(D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol);
|
volumeFadeInTimer = -(D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol);
|
||||||
} else {
|
} else {
|
||||||
phi_t0 = D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol;
|
volumeFadeInTimer = D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol;
|
||||||
}
|
}
|
||||||
Audio_SetVolScale(SEQ_PLAYER_BGM_SUB, 3, sAudioEnemyVol, phi_t0);
|
|
||||||
|
Audio_SetVolScale(SEQ_PLAYER_BGM_SUB, 3, sAudioEnemyVol, volumeFadeInTimer);
|
||||||
Audio_StartSeq(SEQ_PLAYER_BGM_SUB, 10, NA_BGM_ENEMY | 0x800);
|
Audio_StartSeq(SEQ_PLAYER_BGM_SUB, 10, NA_BGM_ENEMY | 0x800);
|
||||||
if (phi_t1 != NA_BGM_NATURE_AMBIENCE) {
|
|
||||||
|
if (seqId != NA_BGM_NATURE_AMBIENCE) {
|
||||||
Audio_SetVolScale(SEQ_PLAYER_BGM_MAIN, 3, (0x7F - sAudioEnemyVol) & 0xFF, 0xA);
|
Audio_SetVolScale(SEQ_PLAYER_BGM_MAIN, 3, (0x7F - sAudioEnemyVol) & 0xFF, 0xA);
|
||||||
func_800F510C(sAudioEnemyVol);
|
Audio_SplitBgmChannels(sAudioEnemyVol);
|
||||||
}
|
}
|
||||||
} else {
|
} else if ((sPrevSeqMode & 0x7F) == SEQ_MODE_ENEMY) {
|
||||||
if ((D_8013061C & 0x7F) == 1) {
|
// Stop playing enemy bgm
|
||||||
Audio_SeqCmd1(SEQ_PLAYER_BGM_SUB, 10);
|
Audio_SeqCmd1(SEQ_PLAYER_BGM_SUB, 10);
|
||||||
if (arg0 == 3) {
|
if (seqMode == SEQ_MODE_IGNORE) {
|
||||||
phi_a3 = 0;
|
volumeFadeOutTimer = 0;
|
||||||
} else {
|
} else {
|
||||||
phi_a3 = 10;
|
volumeFadeOutTimer = 10;
|
||||||
}
|
|
||||||
|
|
||||||
Audio_SetVolScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F, phi_a3);
|
|
||||||
func_800F510C(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Audio_SetVolScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F, volumeFadeOutTimer);
|
||||||
|
Audio_SplitBgmChannels(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
D_8013061C = arg0 + 0x80;
|
sPrevSeqMode = seqMode + 0x80;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (arg0 == 0) {
|
// Hyrule Field will play slightly different bgm music depending on whether player is standing
|
||||||
if (D_8013061C == 2) {
|
// still or moving. This is the logic to determine the transition between those two states
|
||||||
D_80130638 = 0;
|
if (seqMode == SEQ_MODE_DEFAULT) {
|
||||||
|
if (sPrevSeqMode == SEQ_MODE_STILL) {
|
||||||
|
sNumFramesMoving = 0;
|
||||||
}
|
}
|
||||||
D_80130634 = 0;
|
sNumFramesStill = 0;
|
||||||
D_80130638++;
|
sNumFramesMoving++;
|
||||||
} else {
|
} else {
|
||||||
D_80130634++;
|
sNumFramesStill++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arg0 == 2 && D_80130634 < 0x1E && D_80130638 >= 0x15) {
|
if (seqMode == SEQ_MODE_STILL && sNumFramesStill < 30 && sNumFramesMoving > 20) {
|
||||||
arg0 = 0;
|
seqMode = SEQ_MODE_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
D_8013061C = arg0;
|
sPrevSeqMode = seqMode;
|
||||||
Audio_SeqCmd7(SEQ_PLAYER_BGM_MAIN, 2, arg0);
|
Audio_SeqCmd7(SEQ_PLAYER_BGM_MAIN, 2, seqMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_800F6114(f32 dist) {
|
void Audio_SetBgmEnemyVolume(f32 dist) {
|
||||||
f32 adjDist;
|
f32 adjDist;
|
||||||
|
|
||||||
if (D_8013061C == 0x81) {
|
if (sPrevSeqMode == (0x80 | SEQ_MODE_ENEMY)) {
|
||||||
if (dist != sAudioEnemyDist) {
|
if (dist != sAudioEnemyDist) {
|
||||||
if (dist < 150.0f) {
|
if (dist < 150.0f) {
|
||||||
adjDist = 0.0f;
|
adjDist = 0.0f;
|
||||||
|
@ -3989,13 +4111,13 @@ void func_800F6114(f32 dist) {
|
||||||
}
|
}
|
||||||
|
|
||||||
sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f;
|
sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f;
|
||||||
Audio_SetVolScale(SEQ_PLAYER_BGM_SUB, 3, sAudioEnemyVol, 0xA);
|
Audio_SetVolScale(SEQ_PLAYER_BGM_SUB, 3, sAudioEnemyVol, 10);
|
||||||
if (D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 != NA_BGM_NATURE_AMBIENCE) {
|
if (D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 != NA_BGM_NATURE_AMBIENCE) {
|
||||||
Audio_SetVolScale(SEQ_PLAYER_BGM_MAIN, 3, (0x7F - sAudioEnemyVol), 0xA);
|
Audio_SetVolScale(SEQ_PLAYER_BGM_MAIN, 3, (0x7F - sAudioEnemyVol), 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 != NA_BGM_NATURE_AMBIENCE) {
|
if (D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 != NA_BGM_NATURE_AMBIENCE) {
|
||||||
func_800F510C(sAudioEnemyVol);
|
Audio_SplitBgmChannels(sAudioEnemyVol);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sAudioEnemyDist = dist;
|
sAudioEnemyDist = dist;
|
||||||
|
@ -4241,7 +4363,7 @@ void Audio_PreNMI(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_800F6C34(void) {
|
void func_800F6C34(void) {
|
||||||
D_8013061C = 0;
|
sPrevSeqMode = 0;
|
||||||
D_8016B7A8 = 1.0f;
|
D_8016B7A8 = 1.0f;
|
||||||
D_8016B7B0 = 1.0f;
|
D_8016B7B0 = 1.0f;
|
||||||
sAudioBaseFilter = 0;
|
sAudioBaseFilter = 0;
|
||||||
|
@ -4336,7 +4458,7 @@ void func_800F6FB4(u8 arg0) {
|
||||||
u8 b2;
|
u8 b2;
|
||||||
|
|
||||||
if ((D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 == NA_BGM_DISABLED) ||
|
if ((D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 == NA_BGM_DISABLED) ||
|
||||||
((D_80130658[((u8)D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254) & 0xFF] & 0x80) == 0)) {
|
!(sSeqFlags[((u8)D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254) & 0xFF] & 0x80)) {
|
||||||
func_800F6E7C(D_801306DC[arg0].unk_00, D_801306DC[arg0].unk_02);
|
func_800F6E7C(D_801306DC[arg0].unk_00, D_801306DC[arg0].unk_02);
|
||||||
while ((D_801306DC[arg0].unk_04[i] != 0xFF) && (i < 100)) {
|
while ((D_801306DC[arg0].unk_04[i] != 0xFF) && (i < 100)) {
|
||||||
// Probably a fake match, using Audio_SeqCmd8 doesn't work.
|
// Probably a fake match, using Audio_SeqCmd8 doesn't work.
|
||||||
|
|
|
@ -391,14 +391,14 @@ void func_800FA174(u8 playerIdx) {
|
||||||
D_8016E348[playerIdx] = 0;
|
D_8016E348[playerIdx] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_800FA18C(u8 playeridx, u8 arg1) {
|
void func_800FA18C(u8 playerIdx, u8 arg1) {
|
||||||
u8 i;
|
u8 i;
|
||||||
|
|
||||||
for (i = 0; i < D_8016E750[playeridx].unk_4D; i++) {
|
for (i = 0; i < D_8016E750[playerIdx].unk_4D; i++) {
|
||||||
u8 unkb = (D_8016E750[playeridx].unk_2C[i] & 0xF00000) >> 20;
|
u8 unkb = (D_8016E750[playerIdx].unk_2C[i] & 0xF00000) >> 20;
|
||||||
|
|
||||||
if (unkb == arg1) {
|
if (unkb == arg1) {
|
||||||
D_8016E750[playeridx].unk_2C[i] = 0xFF000000;
|
D_8016E750[playerIdx].unk_2C[i] = 0xFF000000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -286,7 +286,7 @@ void func_8002C0C0(TargetContext* targetCtx, Actor* actor, GlobalContext* global
|
||||||
targetCtx->targetedActor = NULL;
|
targetCtx->targetedActor = NULL;
|
||||||
targetCtx->unk_40 = 0.0f;
|
targetCtx->unk_40 = 0.0f;
|
||||||
targetCtx->unk_8C = NULL;
|
targetCtx->unk_8C = NULL;
|
||||||
targetCtx->unk_90 = NULL;
|
targetCtx->bgmEnemy = NULL;
|
||||||
targetCtx->unk_4B = 0;
|
targetCtx->unk_4B = 0;
|
||||||
targetCtx->unk_4C = 0;
|
targetCtx->unk_4C = 0;
|
||||||
func_8002BF60(targetCtx, actor, actor->category, globalCtx);
|
func_8002BF60(targetCtx, actor, actor->category, globalCtx);
|
||||||
|
@ -2836,8 +2836,8 @@ Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, GlobalContext* globalC
|
||||||
actorCtx->targetCtx.unk_8C = NULL;
|
actorCtx->targetCtx.unk_8C = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actor == actorCtx->targetCtx.unk_90) {
|
if (actor == actorCtx->targetCtx.bgmEnemy) {
|
||||||
actorCtx->targetCtx.unk_90 = NULL;
|
actorCtx->targetCtx.bgmEnemy = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Audio_StopSfxByPos(&actor->projectedPos);
|
Audio_StopSfxByPos(&actor->projectedPos);
|
||||||
|
@ -2873,7 +2873,7 @@ s32 func_80032880(GlobalContext* globalCtx, Actor* actor) {
|
||||||
Actor* D_8015BBE8;
|
Actor* D_8015BBE8;
|
||||||
Actor* D_8015BBEC;
|
Actor* D_8015BBEC;
|
||||||
f32 D_8015BBF0;
|
f32 D_8015BBF0;
|
||||||
f32 D_8015BBF4;
|
f32 sbgmEnemyDistSq;
|
||||||
s32 D_8015BBF8;
|
s32 D_8015BBF8;
|
||||||
s16 D_8015BBFC;
|
s16 D_8015BBFC;
|
||||||
|
|
||||||
|
@ -2890,10 +2890,13 @@ void func_800328D4(GlobalContext* globalCtx, ActorContext* actorCtx, Player* pla
|
||||||
|
|
||||||
while (actor != NULL) {
|
while (actor != NULL) {
|
||||||
if ((actor->update != NULL) && ((Player*)actor != player) && ((actor->flags & 1) == 1)) {
|
if ((actor->update != NULL) && ((Player*)actor != player) && ((actor->flags & 1) == 1)) {
|
||||||
|
|
||||||
|
// This block below is for determining the closest actor to player in determining the volume
|
||||||
|
// used while playing enemy bgm music
|
||||||
if ((actorCategory == ACTORCAT_ENEMY) && ((actor->flags & 5) == 5) &&
|
if ((actorCategory == ACTORCAT_ENEMY) && ((actor->flags & 5) == 5) &&
|
||||||
(actor->xyzDistToPlayerSq < 250000.0f) && (actor->xyzDistToPlayerSq < D_8015BBF4)) {
|
(actor->xyzDistToPlayerSq < SQ(500.0f)) && (actor->xyzDistToPlayerSq < sbgmEnemyDistSq)) {
|
||||||
actorCtx->targetCtx.unk_90 = actor;
|
actorCtx->targetCtx.bgmEnemy = actor;
|
||||||
D_8015BBF4 = actor->xyzDistToPlayerSq;
|
sbgmEnemyDistSq = actor->xyzDistToPlayerSq;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actor != sp84) {
|
if (actor != sp84) {
|
||||||
|
@ -2929,13 +2932,13 @@ Actor* func_80032AF0(GlobalContext* globalCtx, ActorContext* actorCtx, Actor** a
|
||||||
u8* entry;
|
u8* entry;
|
||||||
|
|
||||||
D_8015BBE8 = D_8015BBEC = NULL;
|
D_8015BBE8 = D_8015BBEC = NULL;
|
||||||
D_8015BBF0 = D_8015BBF4 = FLT_MAX;
|
D_8015BBF0 = sbgmEnemyDistSq = FLT_MAX;
|
||||||
D_8015BBF8 = 0x7FFFFFFF;
|
D_8015BBF8 = 0x7FFFFFFF;
|
||||||
|
|
||||||
if (!Player_InCsMode(globalCtx)) {
|
if (!Player_InCsMode(globalCtx)) {
|
||||||
entry = &D_801160A0[0];
|
entry = &D_801160A0[0];
|
||||||
|
|
||||||
actorCtx->targetCtx.unk_90 = NULL;
|
actorCtx->targetCtx.bgmEnemy = NULL;
|
||||||
D_8015BBFC = player->actor.shape.rot.y;
|
D_8015BBFC = player->actor.shape.rot.y;
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
|
|
|
@ -129,7 +129,7 @@ static u16 sBgmList[] = {
|
||||||
NA_BGM_DOOR_OF_TIME,
|
NA_BGM_DOOR_OF_TIME,
|
||||||
NA_BGM_OWL,
|
NA_BGM_OWL,
|
||||||
NA_BGM_SHADOW_TEMPLE,
|
NA_BGM_SHADOW_TEMPLE,
|
||||||
NA_BGM_WATAER_TEMPLE,
|
NA_BGM_WATER_TEMPLE,
|
||||||
NA_BGM_BRIDGE_TO_GANONS,
|
NA_BGM_BRIDGE_TO_GANONS,
|
||||||
NA_BGM_VARIOUS_SFX,
|
NA_BGM_VARIOUS_SFX,
|
||||||
NA_BGM_OCARINA_OF_TIME,
|
NA_BGM_OCARINA_OF_TIME,
|
||||||
|
|
|
@ -9626,14 +9626,14 @@ void func_80847BA0(GlobalContext* globalCtx, Player* this) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_808486A8(GlobalContext* globalCtx, Player* this) {
|
void Player_UpdateCamAndSeqModes(GlobalContext* globalCtx, Player* this) {
|
||||||
u8 sp27;
|
u8 seqMode;
|
||||||
s32 pad;
|
s32 pad;
|
||||||
Actor* unk_664;
|
Actor* unk_664;
|
||||||
s32 camMode;
|
s32 camMode;
|
||||||
|
|
||||||
if (this->actor.category == ACTORCAT_PLAYER) {
|
if (this->actor.category == ACTORCAT_PLAYER) {
|
||||||
sp27 = 0;
|
seqMode = SEQ_MODE_DEFAULT;
|
||||||
|
|
||||||
if (this->csMode != 0) {
|
if (this->csMode != 0) {
|
||||||
Camera_ChangeMode(Gameplay_GetCamera(globalCtx, 0), CAM_MODE_NORMAL);
|
Camera_ChangeMode(Gameplay_GetCamera(globalCtx, 0), CAM_MODE_NORMAL);
|
||||||
|
@ -9691,22 +9691,24 @@ void func_808486A8(GlobalContext* globalCtx, Player* this) {
|
||||||
camMode = CAM_MODE_NORMAL;
|
camMode = CAM_MODE_NORMAL;
|
||||||
if ((this->linearVelocity == 0.0f) &&
|
if ((this->linearVelocity == 0.0f) &&
|
||||||
(!(this->stateFlags1 & 0x800000) || (this->rideActor->speedXZ == 0.0f))) {
|
(!(this->stateFlags1 & 0x800000) || (this->rideActor->speedXZ == 0.0f))) {
|
||||||
sp27 = 2;
|
// not moving
|
||||||
|
seqMode = SEQ_MODE_STILL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Camera_ChangeMode(Gameplay_GetCamera(globalCtx, 0), camMode);
|
Camera_ChangeMode(Gameplay_GetCamera(globalCtx, 0), camMode);
|
||||||
} else {
|
} else {
|
||||||
sp27 = 2;
|
// First person mode
|
||||||
|
seqMode = SEQ_MODE_STILL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (globalCtx->actorCtx.targetCtx.unk_90 != NULL) {
|
if (globalCtx->actorCtx.targetCtx.bgmEnemy != NULL) {
|
||||||
sp27 = 1;
|
seqMode = SEQ_MODE_ENEMY;
|
||||||
func_800F6114(sqrtf(globalCtx->actorCtx.targetCtx.unk_90->xyzDistToPlayerSq));
|
Audio_SetBgmEnemyVolume(sqrtf(globalCtx->actorCtx.targetCtx.bgmEnemy->xyzDistToPlayerSq));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (globalCtx->sceneNum != SCENE_TURIBORI) {
|
if (globalCtx->sceneNum != SCENE_TURIBORI) {
|
||||||
func_800F5E90(sp27);
|
Audio_SetSequenceMode(seqMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10155,7 +10157,7 @@ void Player_UpdateCommon(Player* this, GlobalContext* globalCtx, Input* input) {
|
||||||
this->func_674(this, globalCtx);
|
this->func_674(this, globalCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
func_808486A8(globalCtx, this);
|
Player_UpdateCamAndSeqModes(globalCtx, this);
|
||||||
|
|
||||||
if (this->skelAnime.moveFlags & 8) {
|
if (this->skelAnime.moveFlags & 8) {
|
||||||
AnimationContext_SetMoveActor(globalCtx, &this->actor, &this->skelAnime,
|
AnimationContext_SetMoveActor(globalCtx, &this->actor, &this->skelAnime,
|
||||||
|
|
Loading…
Reference in a new issue