diff --git a/include/PR/n_libaudio.h b/include/PR/n_libaudio.h index 330134680..92e08c588 100644 --- a/include/PR/n_libaudio.h +++ b/include/PR/n_libaudio.h @@ -159,16 +159,10 @@ typedef struct { } N_AL19Event; typedef struct { - struct audiohandle *handle; + struct sndstate *sndstate; u32 data; } N_ALGenericEvent; -struct audiohandle; - -typedef struct { - struct audiohandle *handle; -} N_AL400Event; - typedef struct { s16 type; union { @@ -185,7 +179,6 @@ typedef struct { N_ALOscEvent osc; N_AL18Event evt18; N_AL19Event evt19; - N_AL400Event evt400; N_ALGenericEvent generic; } msg; } N_ALEvent; diff --git a/src/game/bondgun.c b/src/game/bondgun.c index c23dd3c45..a533eff47 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -55,7 +55,7 @@ u32 var8009d0d0[2]; s32 var8009d0d8; u32 var8009d0dc; -struct audiohandle *g_BgunAudioHandles[4]; +struct sndstate *g_BgunAudioHandles[4]; u32 var8009d0f0; u32 var8009d0f4; u32 var8009d0f8; @@ -117,7 +117,7 @@ u32 var8009d14c; u32 var8009d0d0[2]; s32 var8009d0d8; -struct audiohandle *g_BgunAudioHandles[4]; +struct sndstate *g_BgunAudioHandles[4]; struct fireslot g_Fireslots[NUM_FIRESLOTS]; u32 fill2[1]; #endif @@ -6908,7 +6908,7 @@ const char var7f1ab898[] = "rofftime"; // } // // if (playsound) { -// struct audiohandle *handle; +// struct sndstate *handle; // //#if VERSION >= VERSION_NTSC_1_0 // OSPri prevpri = osGetThreadPri(0); @@ -7748,10 +7748,10 @@ s32 bgunTickIncAttackEmpty(struct handweaponinfo *info, s32 handnum, struct hand #if VERSION >= VERSION_NTSC_1_0 OSPri prevpri = osGetThreadPri(0); - struct audiohandle *handle; + struct sndstate *handle; osSetThreadPri(0, osGetThreadPri(&g_AudioManager.thread) + 1); #else - struct audiohandle *handle; + struct sndstate *handle; #endif handle = sndStart(var80095200, SFX_HIT_WATER, NULL, -1, -1, -1, -1, -1); @@ -7774,10 +7774,10 @@ s32 bgunTickIncAttackEmpty(struct handweaponinfo *info, s32 handnum, struct hand #if VERSION >= VERSION_NTSC_1_0 OSPri prevpri = osGetThreadPri(0); - struct audiohandle *handle; + struct sndstate *handle; osSetThreadPri(0, osGetThreadPri(&g_AudioManager.thread) + 1); #else - struct audiohandle *handle; + struct sndstate *handle; #endif handle = sndStart(var80095200, SFX_FIREEMPTY, NULL, -1, -1, -1, -1, -1); @@ -8135,21 +8135,21 @@ s32 bgunTickIncChangeGun(struct handweaponinfo *info, s32 handnum, struct hand * && !g_PlayerInvincible && !g_Vars.currentplayer->isdead) { #if VERSION >= VERSION_NTSC_1_0 - struct audiohandle *handle1; + struct sndstate *handle1; f32 speed1; - struct audiohandle *handle2; + struct sndstate *handle2; OSPri prevpri1; f32 speed2; OSPri prevpri2; - struct audiohandle *handle3; + struct sndstate *handle3; f32 speed3; OSPri prevpri3; #else - struct audiohandle *handle1; + struct sndstate *handle1; f32 speed1; - struct audiohandle *handle2; + struct sndstate *handle2; f32 speed2; - struct audiohandle *handle3; + struct sndstate *handle3; f32 speed3; #endif @@ -27168,7 +27168,7 @@ glabel var7f1aca90 /** * Find and return an available audio handle out of a pool of four. */ -struct audiohandle **bgunAllocateAudioHandle(void) +struct sndstate **bgunAllocateAudioHandle(void) { s32 i; @@ -27186,7 +27186,7 @@ void bgunPlayPropHitSound(struct gset *gset, struct prop *prop, s32 texturenum) #if VERSION >= VERSION_NTSC_1_0 u32 rand1 = random(); u32 rand2 = random(); - struct audiohandle **handle; + struct sndstate **handle; if (g_Vars.lvupdate240 <= 0) { return; @@ -27331,7 +27331,7 @@ void bgunPlayPropHitSound(struct gset *gset, struct prop *prop, s32 texturenum) #else u32 rand1 = random(); u32 rand2 = random(); - struct audiohandle **handle; + struct sndstate **handle; if (g_Vars.lvupdate240 <= 0) { return; @@ -27465,7 +27465,7 @@ void bgunPlayPropHitSound(struct gset *gset, struct prop *prop, s32 texturenum) void bgun0f0a8404(struct coord *pos, s16 *rooms, s32 arg2) { if (g_Vars.lvupdate240 > 0) { - struct audiohandle **handle = bgunAllocateAudioHandle(); + struct sndstate **handle = bgunAllocateAudioHandle(); if (handle) { sndStart(var80095200, SFX_HIT_GLASS, handle, -1, -1, -1, -1, -1); @@ -27480,7 +27480,7 @@ void bgun0f0a8404(struct coord *pos, s16 *rooms, s32 arg2) void bgunPlayBgHitSound(struct gset *gset, struct coord *arg1, s32 texturenum, s16 *arg3) { #if VERSION >= VERSION_NTSC_1_0 - struct audiohandle **handle; + struct sndstate **handle; u32 rand1 = random(); u32 rand2 = random(); bool playdefault; @@ -27579,7 +27579,7 @@ void bgunPlayBgHitSound(struct gset *gset, struct coord *arg1, s32 texturenum, s } } #else - struct audiohandle **handle; + struct sndstate **handle; u32 rand1 = random(); u32 rand2 = random(); s16 soundnum; diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index f38407232..e31b2e848 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -12018,7 +12018,7 @@ bool aiChrBeginOrEndTeleport(void) #if VERSION >= VERSION_NTSC_1_0 s32 audiopri; #endif - struct audiohandle *handle; + struct sndstate *handle; fvalue = 0.4; chr = chrFindById(g_Vars.chrdata, cmd[4]); prevplayernum = g_Vars.currentplayernum; @@ -12076,7 +12076,7 @@ bool aiIfChrTeleportFullWhite(void) #if VERSION >= VERSION_NTSC_1_0 s32 audiopri; #endif - struct audiohandle *handle; + struct sndstate *handle; if (chr && chr->prop && chr->prop->type == PROPTYPE_PLAYER) { u32 playernum = propGetPlayerNum(chr->prop); diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index 966f9b390..b14f14c0a 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -197,7 +197,7 @@ void menuPlaySound(s32 menusound) } if (sound != -1) { - struct audiohandle *handle; + struct sndstate *handle; #if VERSION >= VERSION_NTSC_1_0 OSPri prevpri = osGetThreadPri(NULL); diff --git a/src/game/hudmsg.c b/src/game/hudmsg.c index 529ab9461..cb3228aba 100644 --- a/src/game/hudmsg.c +++ b/src/game/hudmsg.c @@ -3463,7 +3463,7 @@ void hudmsgsTick(void) sndStart(var80095200, SFX_HUDMSG, NULL, -1, -1, -1, -1, -1); #else // Probable mismatch here for ntsc-beta - static struct audiohandle *var800736b0nb = NULL; + static struct sndstate *var800736b0nb = NULL; sndStart(var80095200, SFX_HUDMSG, &var800736b0nb, -1, -1, -1, -1, -1); #endif } diff --git a/src/game/lv.c b/src/game/lv.c index 142d0354b..0b8ad6939 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -106,7 +106,7 @@ #include "data.h" #include "types.h" -struct audiohandle *g_MiscSfxAudioHandles[3]; +struct sndstate *g_MiscSfxAudioHandles[3]; u32 var800aa5bc; s32 g_MiscSfxActiveTypes[3]; @@ -121,7 +121,7 @@ s32 g_StageTimeElapsed60 = 0; s32 g_MpTimeLimit60 = SECSTOTIME60(60 * 10); // 10 minutes s32 g_MpScoreLimit = 10; s32 g_MpTeamScoreLimit = 20; -struct audiohandle *g_MiscAudioHandle = NULL; +struct sndstate *g_MiscAudioHandle = NULL; s32 g_NumReasonsToEndMpMatch = 0; f32 g_StageTimeElapsed1f = 0; bool var80084040 = true; @@ -3792,7 +3792,7 @@ Gfx *lvRender(Gfx *gdl) } if (var80075d78 <= 0) { - static struct audiohandle *g_CutsceneStaticAudioHandle = NULL; + static struct sndstate *g_CutsceneStaticAudioHandle = NULL; static s32 g_CutsceneStaticTimer = 100; static u8 g_CutsceneStaticActive = false; bool cutscenehasstatic = false; diff --git a/src/game/nbomb.c b/src/game/nbomb.c index a0d2c0bac..a63434958 100644 --- a/src/game/nbomb.c +++ b/src/game/nbomb.c @@ -2841,7 +2841,7 @@ Gfx *nbombCreateGdl(void) return gdlstart; } -struct audiohandle *g_NbombAudioHandle = NULL; +struct sndstate *g_NbombAudioHandle = NULL; Gfx *nbombRender(Gfx *gdl, struct nbomb *nbomb, Gfx *subgdl) { diff --git a/src/game/prop.c b/src/game/prop.c index a30f61ad7..b2e80b9a3 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -446,7 +446,7 @@ void weaponPlayWhooshSound(s32 weaponnum, struct prop *prop) if (soundnum != -1) { if (prop == g_Vars.currentplayer->prop) { - struct audiohandle *handle; + struct sndstate *handle; #if VERSION >= VERSION_NTSC_1_0 u32 stack; OSPri prevpri = osGetThreadPri(0); @@ -481,7 +481,7 @@ void func0f060bac(s32 weaponnum, struct prop *prop) { s32 soundnum = -1; f32 speed = 1; - struct audiohandle *handle; + struct sndstate *handle; if (weaponnum == WEAPON_UNARMED) { soundnum = SFX_THUD_808F; diff --git a/src/game/propobj.c b/src/game/propobj.c index 3aa24fa2f..21b0f2326 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -121,7 +121,7 @@ struct monitorthing *g_MonitorThings; u32 g_TintedGlassEnabled = 0; s32 g_AlarmTimer = 0; -struct audiohandle *g_AlarmAudioHandle = NULL; +struct sndstate *g_AlarmAudioHandle = NULL; f32 g_AlarmSpeakerWeight = 64; f32 g_AlarmSpeakerDirection = 1; f32 g_GasReleaseTimer240 = 0; @@ -129,7 +129,7 @@ bool g_GasReleasing = false; struct coord g_GasPos = {0}; s32 g_GasLastCough60 = 0; f32 g_GasSoundTimer240 = 0; -struct audiohandle *g_GasAudioHandle = NULL; +struct sndstate *g_GasAudioHandle = NULL; u32 g_CountdownTimerOff = COUNTDOWNTIMERREASON_AI; bool g_CountdownTimerRunning = false; f32 g_CountdownTimerValue60 = 0; diff --git a/src/game/sight.c b/src/game/sight.c index 6bf867e4b..304d39efa 100644 --- a/src/game/sight.c +++ b/src/game/sight.c @@ -246,7 +246,7 @@ void sightTick(bool sighton) if (sighton) { if (g_Vars.currentplayer->lookingatprop.prop) { if (g_Vars.currentplayer->lookingatprop.prop != g_Vars.currentplayer->cmpfollowprops[0].prop) { - struct audiohandle *handle; + struct sndstate *handle; handle = snd00010718(&handle, 0, 0x7fff, 0x40, 7, 1, 1, -1, 1); @@ -272,7 +272,7 @@ void sightTick(bool sighton) index = sightFindFreeTargetIndex(1); if (index >= 0) { - struct audiohandle *handle; + struct sndstate *handle; handle = snd00010718(&handle, 0, 0x7fff, 0x40, 7, 1, 1, -1, 1); @@ -295,7 +295,7 @@ void sightTick(bool sighton) index = sightFindFreeTargetIndex(4); if (index >= 0) { - struct audiohandle *handle; + struct sndstate *handle; handle = snd00010718(&handle, 0, 0x7fff, 0x40, 7, 1, 1, -1, 1); diff --git a/src/game/title.c b/src/game/title.c index e9aa0218e..e6e8a91bd 100644 --- a/src/game/title.c +++ b/src/game/title.c @@ -1902,7 +1902,7 @@ u32 var80062854 = 0x00000000; u32 var80062858 = 0x00000000; u32 var8006285c = 0x00000000; u32 var80062860 = 0x447a0000; -struct audiohandle *g_TitleAudioHandle = NULL; +struct sndstate *g_TitleAudioHandle = NULL; u32 var80062868 = 0x00000000; u32 var8006286c = 0x00000000; diff --git a/src/include/bss.h b/src/include/bss.h index 112ac39ae..15705a52b 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -128,7 +128,7 @@ extern struct criteria_multiroomentered *g_MultiroomEnteredCriterias; extern struct criteria_holograph *g_HolographCriterias; extern u32 var8009d0d0[2]; extern s32 var8009d0d8; -extern struct audiohandle *g_BgunAudioHandles[4]; +extern struct sndstate *g_BgunAudioHandles[4]; extern struct fireslot g_Fireslots[]; extern struct casing g_Casings[20]; extern struct var8009da60 var8009da60[8]; diff --git a/src/include/constants.h b/src/include/constants.h index bea37fad1..b64f77d5a 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -3412,6 +3412,11 @@ #define SMOKETYPE_DEBRIS 21 // Crash site cockpit, Skedar Ruins outro #define SMOKETYPE_UFO 22 // AF1 outro +#define SNDSTATEFLAG_01 0x01 +#define SNDSTATEFLAG_02 0x02 +#define SNDSTATEFLAG_04 0x04 +#define SNDSTATEFLAG_10 0x10 + #define SOLOSTAGEINDEX_DEFECTION 0x00 #define SOLOSTAGEINDEX_INVESTIGATION 0x01 #define SOLOSTAGEINDEX_EXTRACTION 0x02 diff --git a/src/include/data.h b/src/include/data.h index dc964876a..9d5cd9039 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -199,14 +199,14 @@ extern s16 var80067ff0[]; extern f32 var80069880; extern u32 g_TintedGlassEnabled; extern s32 g_AlarmTimer; -extern struct audiohandle *g_AlarmAudioHandle; +extern struct sndstate *g_AlarmAudioHandle; extern f32 g_AlarmSpeakerWeight; extern f32 g_GasReleaseTimer240; extern bool g_GasReleasing; extern struct coord g_GasPos; extern s32 g_GasLastCough60; extern f32 g_GasSoundTimer240; -extern struct audiohandle *g_GasAudioHandle; +extern struct sndstate *g_GasAudioHandle; extern u32 g_CountdownTimerOff; extern bool g_CountdownTimerRunning; extern f32 g_CountdownTimerValue60; diff --git a/src/include/game/bondgun.h b/src/include/game/bondgun.h index d97bae154..b1a6f90fd 100644 --- a/src/include/game/bondgun.h +++ b/src/include/game/bondgun.h @@ -136,7 +136,7 @@ void bgunTickMaulerCharge(void); void bgun0f0a6c30(void); s32 bgunAllocateFireslot(void); void bgun0f0a7138(Gfx **gdl); -struct audiohandle **bgunAllocateAudioHandle(void); +struct sndstate **bgunAllocateAudioHandle(void); void bgunPlayPropHitSound(struct gset *gset, struct prop *prop, s32 texturenum); void bgun0f0a8404(struct coord *pos, s16 *rooms, s32 arg2); void bgunPlayBgHitSound(struct gset *gset, struct coord *arg1, s32 texturenum, s16 *arg3); diff --git a/src/include/game/game_092610.h b/src/include/game/game_092610.h index ecf3899fc..d14e911bd 100644 --- a/src/include/game/game_092610.h +++ b/src/include/game/game_092610.h @@ -26,7 +26,7 @@ u32 func0f094940(void); u32 func0f094b1c(void); u32 func0f094d78(void); void func0f094ef4(struct coord *pos, s16 *rooms, s32 soundnum, s32 *arg3, s32 *arg4); -void func0f09505c(struct audiohandle *handle, struct coord *pos, f32 arg2, f32 arg3, f32 arg4, s16 *rooms, s16 soundnum, u16 arg7, u32 arg8); +void func0f09505c(struct sndstate *handle, struct coord *pos, f32 arg2, f32 arg3, f32 arg4, s16 *rooms, s16 soundnum, u16 arg7, u32 arg8); u32 func0f095200(void); s32 func0f095278(s32 channelnum); diff --git a/src/include/lib/lib_317f0.h b/src/include/lib/lib_317f0.h index 056244415..7800eba6d 100644 --- a/src/include/lib/lib_317f0.h +++ b/src/include/lib/lib_317f0.h @@ -4,21 +4,21 @@ #include "data.h" #include "types.h" -void func00033090(struct audiohandle *handle); +void func00033090(struct sndstate *handle); u32 func00033100(void); u16 sndpCountStates(s16 *numfreeptr, s16 *numallocedptr); void func00033378(void *fn); u32 func00033390(void); void func00033634(void *fn); -bool audioIsPlaying(struct audiohandle *handle); -struct audiohandle *func00033820(s32 arg0, s16 soundnum, s32 arg2, s32 arg3, f32 arg4, s32 arg5, s32 arg6, struct audiohandle **handle); -void audioStop(struct audiohandle *handle); -void func00033bc0(struct audiohandle *handle); +bool audioIsPlaying(struct sndstate *handle); +struct sndstate *func00033820(s32 arg0, s16 soundnum, s32 arg2, s32 arg3, f32 arg4, s32 arg5, s32 arg6, struct sndstate **handle); +void audioStop(struct sndstate *handle); +void func00033bc0(struct sndstate *handle); void func00033db0(void); void func00033dd8(void); -void audioPostEvent(struct audiohandle *handle, s16 type, s32 data); +void audioPostEvent(struct sndstate *handle, s16 type, s32 data); u16 func00033ec4(u8 index); -struct audiohandle *func00033f08(void); +struct sndstate *func00033f08(void); ALMicroTime sndpGetCurTime(void); void func00033f44(u8 index, u16 volume); diff --git a/src/include/lib/snd.h b/src/include/lib/snd.h index 1295a7344..509c367db 100644 --- a/src/include/lib/snd.h +++ b/src/include/lib/snd.h @@ -32,9 +32,9 @@ void snd0000fe50(void); void sndTick(void); bool sndIsDisabled(void); void snd0001036c(u8 arg0); -void sndAdjust(struct audiohandle **handle, s32 arg1, s32 arg2, s32 speakerweight, s16 soundnum, f32 arg5, s32 arg6, s32 arg7, s32 arg8); -struct audiohandle *snd00010718(struct audiohandle **handle, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6, s32 arg7, s32 arg8); -struct audiohandle *sndStart(s32 arg0, s16 sound, struct audiohandle **handle, s32 arg3, s32 arg4, f32 arg5, s32 arg6, s32 arg7); +void sndAdjust(struct sndstate **handle, s32 arg1, s32 arg2, s32 speakerweight, s16 soundnum, f32 arg5, s32 arg6, s32 arg7, s32 arg8); +struct sndstate *snd00010718(struct sndstate **handle, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6, s32 arg7, s32 arg8); +struct sndstate *sndStart(s32 arg0, s16 sound, struct sndstate **handle, s32 arg3, s32 arg4, f32 arg5, s32 arg6, s32 arg7); void snd00010ae4(s32 soundnum, s32 arg1, s32 arg2, s32 arg3); void sndPlayNosedive(s32 seconds); void sndStopNosedive(void); diff --git a/src/include/types.h b/src/include/types.h index 27d0f0167..b64075df3 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2123,29 +2123,32 @@ struct eyespy { /*0x7c*/ f32 pitch; }; -struct var8005f120_08_04 { +struct sndstate_08_04 { u16 unk00; u8 unk02; }; -struct audiohandle_08 { +struct sndstate_08 { u32 unk00; - struct var8005f120_08_04 *unk04; + struct sndstate_08_04 *unk04; }; -struct audiohandle { +struct sndstate { /*0x00*/ ALLink node; - /*0x08*/ struct audiohandle_08 *unk08; + /*0x08*/ struct sndstate_08 *unk08; /*0x0c*/ N_ALVoice voice; /*0x28*/ u32 unk28; /*0x2c*/ u32 unk2c; - /*0x30*/ struct audiohandle **unk30; + /*0x30*/ struct sndstate **unk30; /*0x34*/ u32 unk34; /*0x38*/ u32 unk38; /*0x3c*/ u32 unk3c; /*0x40*/ u32 unk40; - /*0x44*/ u8 unk44; + /*0x44*/ u8 flags; /*0x45*/ u8 playing; +#if VERSION >= VERSION_NTSC_1_0 + /*0x48*/ u32 unk48; +#endif }; /** @@ -2276,8 +2279,8 @@ struct hand { /*0x07e8*/ struct coord adjustpos; /*0x07f4*/ f32 xshift; /*0x07f8*/ struct coord aimpos; - /*0x0804*/ struct audiohandle *audiohandle2; - /*0x0808*/ struct audiohandle *audiohandle3; + /*0x0804*/ struct sndstate *audiohandle2; + /*0x0808*/ struct sndstate *audiohandle3; /*0x080c*/ s32 allowshootframe; /*0x0810*/ s32 lastshootframe60; /*0x0814*/ struct beam beam; @@ -2434,7 +2437,7 @@ struct hand { /*0x0d74*/ u16 gunroundsspent[4]; // actually a countdown timer /*0x0d7c*/ u32 ispare1; /*0x0d80*/ struct guncmd *unk0d80; - /*0x0d84*/ struct audiohandle *audiohandle; + /*0x0d84*/ struct sndstate *audiohandle; /*0x0d88*/ u32 ispare4; /*0x0d8c*/ u32 ispare5; /*0x0d90*/ u32 ispare6; @@ -2556,7 +2559,7 @@ struct player { /*0x00d4*/ struct model *model00d4; /*0x00d8*/ bool isdead; /*0x00dc*/ f32 bondhealth; // frac (range 0-1) - /*0x00e0*/ struct audiohandle *chokehandle; + /*0x00e0*/ struct sndstate *chokehandle; /*0x00e4*/ f32 oldhealth; /*0x00e8*/ f32 oldarmour; /*0x00ec*/ f32 apparenthealth; @@ -3765,8 +3768,8 @@ struct fireslotthing { struct fireslot { /*0x00*/ s32 endlvframe; #if VERSION < VERSION_NTSC_1_0 - struct audiohandle *unk04nb; - struct audiohandle *unk08nb; + struct sndstate *unk04nb; + struct sndstate *unk08nb; #endif /*0x04*/ struct beam beam; }; @@ -5783,7 +5786,7 @@ struct weatherdata { /*0x28*/ u32 unk28; /*0x2c*/ u32 unk2c; /*0x30*/ u32 unk30; - /*0x34*/ struct audiohandle *audiohandles[4]; + /*0x34*/ struct sndstate *audiohandles[4]; /*0x44*/ s32 unk44; /*0x48*/ s32 unk48; /*0x4c*/ s32 unk4c; @@ -6693,7 +6696,7 @@ struct shard { }; struct audiochannel { - /*0x00*/ struct audiohandle *audiohandle; + /*0x00*/ struct sndstate *audiohandle; /*0x04*/ s16 soundnum04; /*0x06*/ s16 unk06; /*0x08*/ s16 unk08; @@ -6827,8 +6830,8 @@ struct nbomb { s16 unk14; f32 unk18; struct prop *prop; - struct audiohandle *audiohandle20; - struct audiohandle *audiohandle24; + struct sndstate *audiohandle20; + struct sndstate *audiohandle24; }; struct roomacousticdata { @@ -7346,29 +7349,6 @@ struct var8007f8dc { /*0x100*/ u32 unk100; }; -struct sndstate { - ALLink node; - u32 unk08; - u32 unk0c; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1c; - u32 unk20; - u32 unk24; - u32 unk28; - u32 unk2c; - u32 unk30; - u32 unk34; - u32 unk38; - u32 unk3c; - u32 unk40; - u32 unk44; -#if VERSION >= VERSION_NTSC_1_0 - u32 unk48; -#endif -}; - struct asistream { s32 unk00; s32 (*unk04)(s32 arg0, void *arg1, s32 arg2, s32 arg3); diff --git a/src/lib/naudio/n_sndplayer.c b/src/lib/naudio/n_sndplayer.c index 1c47b97cf..44971dffb 100644 --- a/src/lib/naudio/n_sndplayer.c +++ b/src/lib/naudio/n_sndplayer.c @@ -9,20 +9,20 @@ u32 var8009c330; s16 *var8009c334; -struct audiohandle *g_SndpAllocHandlesHead = NULL; -struct audiohandle *g_SndpAllocHandlesTail = NULL; -struct audiohandle *g_SndpFreeHandlesHead = NULL; +struct sndstate *g_SndpAllocStatesHead = NULL; +struct sndstate *g_SndpAllocStatesTail = NULL; +struct sndstate *g_SndpFreeStatesHead = NULL; N_ALSndPlayer *g_SndPlayer = &var8009c2d0; s16 var8005f130 = 0; u32 var8005f134 = 0; u32 var8005f138 = 0; void *var8005f13c = NULL; // function callback -void (*var8005f140)(struct audiohandle_08 *) = NULL; +void (*var8005f140)(struct sndstate_08 *) = NULL; void func00033378(void *fn); void func00033634(void *fn); -void sndpFreeHandle(struct audiohandle *handle); -void func00033bc0(struct audiohandle *handle); +void sndpFreeState(struct sndstate *state); +void func00033bc0(struct sndstate *state); void n_alSndpNew(ALSndpConfig *config) { @@ -42,7 +42,7 @@ void n_alSndpNew(ALSndpConfig *config) ptr = alHeapAlloc(config->heap, 1, config->maxEvents * 0x1c); n_alEvtqNew(&g_SndPlayer->evtq, ptr, config->maxEvents); - g_SndpFreeHandlesHead = g_SndPlayer->sndState; + g_SndpFreeStatesHead = g_SndPlayer->sndState; for (i = 1; i < config->maxStates; i++) { struct sndstate *sndstate = g_SndPlayer->sndState; @@ -323,8 +323,8 @@ glabel var7005477c /* 31de4: 8fa90070 */ lw $t1,0x70($sp) /* 31de8: 11200040 */ beqz $t1,.L00031eec /* 31dec: 00000000 */ nop -/* 31df0: 3c0c8006 */ lui $t4,%hi(g_SndpAllocHandlesTail) -/* 31df4: 8d8cf124 */ lw $t4,%lo(g_SndpAllocHandlesTail)($t4) +/* 31df0: 3c0c8006 */ lui $t4,%hi(g_SndpAllocStatesTail) +/* 31df4: 8d8cf124 */ lw $t4,%lo(g_SndpAllocStatesTail)($t4) /* 31df8: afac0054 */ sw $t4,0x54($sp) .L00031dfc: /* 31dfc: 8fab0054 */ lw $t3,0x54($sp) @@ -3005,17 +3005,17 @@ glabel var7005477c ); #endif -void func00033090(struct audiohandle *handle) +void func00033090(struct sndstate *state) { - if (handle->unk44 & 4) { - n_alSynStopVoice(&handle->voice); - n_alSynFreeVoice(&handle->voice); + if (state->flags & SNDSTATEFLAG_04) { + n_alSynStopVoice(&state->voice); + n_alSynFreeVoice(&state->voice); } - sndpFreeHandle(handle); + sndpFreeState(state); // @todo: Remove cast - _removeEvents(&g_SndPlayer->evtq, (N_ALSoundState *)handle, 0xffff); + _removeEvents(&g_SndPlayer->evtq, (N_ALSoundState *)state, 0xffff); } GLOBAL_ASM( @@ -3095,13 +3095,13 @@ u16 sndpCountStates(s16 *numfreeptr, s16 *numallocedptr) u16 numalloced; u16 numfree; u16 numalloced2; - struct audiohandle *ahandle = g_SndpAllocHandlesHead; - struct audiohandle *bhandle = g_SndpFreeHandlesHead; - struct audiohandle *chandle = g_SndpAllocHandlesTail; + struct sndstate *state1 = g_SndpAllocStatesHead; + struct sndstate *state2 = g_SndpFreeStatesHead; + struct sndstate *state3 = g_SndpAllocStatesTail; - for (numalloced = 0; ahandle; numalloced++, ahandle = (struct audiohandle *)ahandle->node.next); - for (numfree = 0; bhandle; numfree++, bhandle = (struct audiohandle *)bhandle->node.next); - for (numalloced2 = 0; chandle; numalloced2++, chandle = (struct audiohandle *)chandle->node.prev); + for (numalloced = 0; state1; numalloced++, state1 = (struct sndstate *)state1->node.next); + for (numfree = 0; state2; numfree++, state2 = (struct sndstate *)state2->node.next); + for (numalloced2 = 0; state3; numalloced2++, state3 = (struct sndstate *)state3->node.prev); *numfreeptr = numfree; *numallocedptr = numalloced; @@ -3148,36 +3148,36 @@ glabel func00033390 /* 333f8: 0c012194 */ jal osSetIntMask /* 333fc: 24040001 */ addiu $a0,$zero,0x1 /* 33400: afa2001c */ sw $v0,0x1c($sp) -/* 33404: 3c0b8006 */ lui $t3,%hi(g_SndpFreeHandlesHead) -/* 33408: 8d6bf128 */ lw $t3,%lo(g_SndpFreeHandlesHead)($t3) +/* 33404: 3c0b8006 */ lui $t3,%hi(g_SndpFreeStatesHead) +/* 33408: 8d6bf128 */ lw $t3,%lo(g_SndpFreeStatesHead)($t3) /* 3340c: afab0024 */ sw $t3,0x24($sp) /* 33410: 8fac0024 */ lw $t4,0x24($sp) /* 33414: 1180007d */ beqz $t4,.L0003360c /* 33418: 00000000 */ nop /* 3341c: 8fad0024 */ lw $t5,0x24($sp) -/* 33420: 3c018006 */ lui $at,%hi(g_SndpFreeHandlesHead) +/* 33420: 3c018006 */ lui $at,%hi(g_SndpFreeStatesHead) /* 33424: 8dae0000 */ lw $t6,0x0($t5) -/* 33428: ac2ef128 */ sw $t6,%lo(g_SndpFreeHandlesHead)($at) +/* 33428: ac2ef128 */ sw $t6,%lo(g_SndpFreeStatesHead)($at) /* 3342c: 0c00c5e9 */ jal alUnlink /* 33430: 8fa40024 */ lw $a0,0x24($sp) -/* 33434: 3c0f8006 */ lui $t7,%hi(g_SndpAllocHandlesHead) -/* 33438: 8deff120 */ lw $t7,%lo(g_SndpAllocHandlesHead)($t7) +/* 33434: 3c0f8006 */ lui $t7,%hi(g_SndpAllocStatesHead) +/* 33438: 8deff120 */ lw $t7,%lo(g_SndpAllocStatesHead)($t7) /* 3343c: 11e0000f */ beqz $t7,.L0003347c /* 33440: 00000000 */ nop -/* 33444: 3c188006 */ lui $t8,%hi(g_SndpAllocHandlesHead) -/* 33448: 8f18f120 */ lw $t8,%lo(g_SndpAllocHandlesHead)($t8) +/* 33444: 3c188006 */ lui $t8,%hi(g_SndpAllocStatesHead) +/* 33448: 8f18f120 */ lw $t8,%lo(g_SndpAllocStatesHead)($t8) /* 3344c: 8fb90024 */ lw $t9,0x24($sp) /* 33450: af380000 */ sw $t8,0x0($t9) /* 33454: 8fa80024 */ lw $t0,0x24($sp) /* 33458: ad000004 */ sw $zero,0x4($t0) -/* 3345c: 3c0a8006 */ lui $t2,%hi(g_SndpAllocHandlesHead) -/* 33460: 8d4af120 */ lw $t2,%lo(g_SndpAllocHandlesHead)($t2) +/* 3345c: 3c0a8006 */ lui $t2,%hi(g_SndpAllocStatesHead) +/* 33460: 8d4af120 */ lw $t2,%lo(g_SndpAllocStatesHead)($t2) /* 33464: 8fa90024 */ lw $t1,0x24($sp) /* 33468: ad490004 */ sw $t1,0x4($t2) /* 3346c: 8fab0024 */ lw $t3,0x24($sp) -/* 33470: 3c018006 */ lui $at,%hi(g_SndpAllocHandlesHead) +/* 33470: 3c018006 */ lui $at,%hi(g_SndpAllocStatesHead) /* 33474: 1000000c */ b .L000334a8 -/* 33478: ac2bf120 */ sw $t3,%lo(g_SndpAllocHandlesHead)($at) +/* 33478: ac2bf120 */ sw $t3,%lo(g_SndpAllocStatesHead)($at) .L0003347c: /* 3347c: 8fac0024 */ lw $t4,0x24($sp) /* 33480: ad800004 */ sw $zero,0x4($t4) @@ -3185,11 +3185,11 @@ glabel func00033390 /* 33488: 8dae0004 */ lw $t6,0x4($t5) /* 3348c: adae0000 */ sw $t6,0x0($t5) /* 33490: 8faf0024 */ lw $t7,0x24($sp) -/* 33494: 3c018006 */ lui $at,%hi(g_SndpAllocHandlesHead) -/* 33498: ac2ff120 */ sw $t7,%lo(g_SndpAllocHandlesHead)($at) +/* 33494: 3c018006 */ lui $at,%hi(g_SndpAllocStatesHead) +/* 33498: ac2ff120 */ sw $t7,%lo(g_SndpAllocStatesHead)($at) /* 3349c: 8fb80024 */ lw $t8,0x24($sp) -/* 334a0: 3c018006 */ lui $at,%hi(g_SndpAllocHandlesTail) -/* 334a4: ac38f124 */ sw $t8,%lo(g_SndpAllocHandlesTail)($at) +/* 334a0: 3c018006 */ lui $at,%hi(g_SndpAllocStatesTail) +/* 334a4: ac38f124 */ sw $t8,%lo(g_SndpAllocStatesTail)($at) .L000334a8: /* 334a8: 0c012194 */ jal osSetIntMask /* 334ac: 8fa4001c */ lw $a0,0x1c($sp) @@ -3304,46 +3304,46 @@ void func00033634(void *fn) var8005f140 = fn; } -void sndpFreeHandle(struct audiohandle *handle) +void sndpFreeState(struct sndstate *state) { var8005f134--; - if (g_SndpAllocHandlesHead == handle) { - g_SndpAllocHandlesHead = (struct audiohandle *)handle->node.next; + if (g_SndpAllocStatesHead == state) { + g_SndpAllocStatesHead = (struct sndstate *)state->node.next; } - if (g_SndpAllocHandlesTail == handle) { - g_SndpAllocHandlesTail = (struct audiohandle *)handle->node.prev; + if (g_SndpAllocStatesTail == state) { + g_SndpAllocStatesTail = (struct sndstate *)state->node.prev; } - alUnlink(&handle->node); + alUnlink(&state->node); - if (g_SndpFreeHandlesHead) { - handle->node.next = &g_SndpFreeHandlesHead->node; - handle->node.prev = NULL; - g_SndpFreeHandlesHead->node.prev = &handle->node; - g_SndpFreeHandlesHead = handle; + if (g_SndpFreeStatesHead) { + state->node.next = &g_SndpFreeStatesHead->node; + state->node.prev = NULL; + g_SndpFreeStatesHead->node.prev = &state->node; + g_SndpFreeStatesHead = state; } else { - handle->node.next = handle->node.prev = NULL; - g_SndpFreeHandlesHead = handle; + state->node.next = state->node.prev = NULL; + g_SndpFreeStatesHead = state; } - if (handle->unk44 & 4) { + if (state->flags & SNDSTATEFLAG_04) { var8005f130--; } - handle->playing = 0; + state->playing = 0; - if (handle->unk30) { - if (*handle->unk30 == handle) { - *handle->unk30 = 0; + if (state->unk30) { + if (*state->unk30 == state) { + *state->unk30 = 0; } - handle->unk30 = NULL; + state->unk30 = NULL; } if (var8005f140) { - var8005f140(handle->unk08); + var8005f140(state->unk08); } } @@ -3362,10 +3362,10 @@ glabel func000337c8 /* 337ec: 00000000 */ nop ); -bool audioIsPlaying(struct audiohandle *handle) +bool audioIsPlaying(struct sndstate *state) { - if (handle) { - return handle->playing; + if (state) { + return state->playing; } else { return false; } @@ -3784,43 +3784,43 @@ glabel func00033820 ); #endif -void audioStop(struct audiohandle *handle) +void audioStop(struct sndstate *state) { N_ALEvent evt; #if VERSION >= VERSION_NTSC_FINAL - if (handle && (handle->unk44 & 2)) { - func00033bc0(handle); + if (state && (state->flags & SNDSTATEFLAG_02)) { + func00033bc0(state); } else { evt.type = AL_400_EVT; - evt.msg.evt400.handle = handle; + evt.msg.generic.sndstate = state; - if (handle != NULL) { - evt.msg.evt400.handle->unk44 &= ~0x10; + if (state != NULL) { + evt.msg.generic.sndstate->flags &= ~SNDSTATEFLAG_10; n_alEvtqPostEvent(&g_SndPlayer->evtq, &evt, 0, 0); } } #elif VERSION >= VERSION_NTSC_1_0 - // NTSC 1.0 lacks the null handle check - if (handle->unk44 & 2) { - func00033bc0(handle); + // NTSC 1.0 lacks the null state check + if (state->flags & SNDSTATEFLAG_02) { + func00033bc0(state); } else { evt.type = AL_400_EVT; - evt.msg.evt400.handle = handle; + evt.msg.generic.sndstate = state; - if (handle != NULL) { - evt.msg.evt400.handle->unk44 &= ~0x10; + if (state != NULL) { + evt.msg.generic.sndstate->flags &= ~SNDSTATEFLAG_10; n_alEvtqPostEvent(&g_SndPlayer->evtq, &evt, 0, 0); } } #else evt.type = AL_400_EVT; - evt.msg.evt400.handle = handle; + evt.msg.generic.sndstate = state; - if (handle != NULL) { - evt.msg.evt400.handle->unk44 &= ~0x10; + if (state != NULL) { + evt.msg.generic.sndstate->flags &= ~SNDSTATEFLAG_10; n_alEvtqPostEvent(&g_SndPlayer->evtq, &evt, 0, 0); } @@ -3828,59 +3828,59 @@ void audioStop(struct audiohandle *handle) } #if VERSION >= VERSION_NTSC_1_0 -void func00033bc0(struct audiohandle *handle) +void func00033bc0(struct sndstate *state) { N_ALEvent evt; evt.type = AL_80_EVT; - evt.msg.generic.handle = handle; + evt.msg.generic.sndstate = state; - if (handle) { - evt.msg.generic.handle->unk44 &= ~0x10; + if (state) { + evt.msg.generic.sndstate->flags &= ~SNDSTATEFLAG_10; n_alEvtqPostEvent(&g_SndPlayer->evtq, &evt, 0, 0); } } #endif -void func00033c30(u8 arg0) +void func00033c30(u8 flags) { OSIntMask mask = osSetIntMask(1); N_ALEvent evt; - struct audiohandle *handle = g_SndpAllocHandlesHead; + struct sndstate *state = g_SndpAllocStatesHead; - while (handle) { + while (state) { evt.type = AL_400_EVT; - evt.msg.generic.handle = handle; + evt.msg.generic.sndstate = state; - if ((handle->unk44 & arg0) == arg0) { - evt.msg.generic.handle->unk44 &= ~0x10; + if ((state->flags & flags) == flags) { + evt.msg.generic.sndstate->flags &= ~SNDSTATEFLAG_10; n_alEvtqPostEvent(&g_SndPlayer->evtq, &evt, 0, 0); } - handle = (struct audiohandle *)handle->node.next; + state = (struct sndstate *)state->node.next; } osSetIntMask(mask); } #if VERSION >= VERSION_NTSC_1_0 -void func00033cf0(u8 arg0) +void func00033cf0(u8 flags) { OSIntMask mask = osSetIntMask(1); N_ALEvent evt; - struct audiohandle *handle = g_SndpAllocHandlesHead; + struct sndstate *state = g_SndpAllocStatesHead; - while (handle) { + while (state) { evt.type = AL_80_EVT; - evt.msg.generic.handle = handle; + evt.msg.generic.sndstate = state; - if ((handle->unk44 & arg0) == arg0) { - evt.msg.generic.handle->unk44 &= ~0x10; + if ((state->flags & flags) == flags) { + evt.msg.generic.sndstate->flags &= ~SNDSTATEFLAG_10; n_alEvtqPostEvent(&g_SndPlayer->evtq, &evt, 0, 0); } - handle = (struct audiohandle *)handle->node.next; + state = (struct sndstate *)state->node.next; } osSetIntMask(mask); @@ -3890,34 +3890,34 @@ void func00033cf0(u8 arg0) #if VERSION >= VERSION_NTSC_1_0 void func00033db0(void) { - func00033cf0(1); + func00033cf0(SNDSTATEFLAG_01); } #endif void func00033dd8(void) { - func00033c30(1); + func00033c30(SNDSTATEFLAG_01); } void func00033e00(void) { - func00033c30(0x11); + func00033c30(SNDSTATEFLAG_01 | SNDSTATEFLAG_10); } void func00033e28(void) { - func00033c30(3); + func00033c30(SNDSTATEFLAG_01 | SNDSTATEFLAG_02); } -void audioPostEvent(struct audiohandle *handle, s16 type, s32 data) +void audioPostEvent(struct sndstate *state, s16 type, s32 data) { N_ALEvent evt; evt.type = type; - evt.msg.generic.handle = handle; + evt.msg.generic.sndstate = state; evt.msg.generic.data = data; - if (handle) { + if (state) { n_alEvtqPostEvent(&g_SndPlayer->evtq, &evt, 0, 0); } else { // empty @@ -3930,9 +3930,9 @@ u16 func00033ec4(u8 index) } #if VERSION >= VERSION_NTSC_1_0 -struct audiohandle *func00033f08(void) +struct sndstate *func00033f08(void) { - return g_SndpAllocHandlesHead; + return g_SndpAllocStatesHead; } #endif @@ -3947,16 +3947,16 @@ void func00033f44(u8 index, u16 volume) { if (var8009c334) { OSIntMask mask = osSetIntMask(1); - struct audiohandle *handle = g_SndpAllocHandlesHead; + struct sndstate *state = g_SndpAllocStatesHead; s32 i; N_ALEvent evt; var8009c334[index] = volume; - for (i = 0; handle != NULL; i++, handle = (struct audiohandle *)handle->node.next) { - if ((handle->unk08->unk04->unk02 & 0x1f) == index) { + for (i = 0; state != NULL; i++, state = (struct sndstate *)state->node.next) { + if ((state->unk08->unk04->unk02 & 0x1f) == index) { evt.type = AL_800_EVT; - evt.msg.generic.handle = handle; + evt.msg.generic.sndstate = state; n_alEvtqPostEvent(&g_SndPlayer->evtq, &evt, 0, 0); } } diff --git a/src/lib/snd.c b/src/lib/snd.c index 0c65bdb1f..fc2ac9746 100644 --- a/src/lib/snd.c +++ b/src/lib/snd.c @@ -62,8 +62,8 @@ s32 g_SndUfoVolume = 0; s32 g_SndUfoAge240 = -1; s32 g_SndUfoDuration240 = 0; -struct audiohandle *g_SndNosediveHandle = NULL; -struct audiohandle *g_SndUfoHandle = NULL; +struct sndstate *g_SndNosediveHandle = NULL; +struct sndstate *g_SndUfoHandle = NULL; u16 g_SfxVolume = 32767; s32 g_SoundMode = (VERSION >= VERSION_NTSC_1_0 ? SOUNDMODE_STEREO : SOUNDMODE_SURROUND); @@ -4576,7 +4576,7 @@ glabel sndStart ); // Mismatch: Likely related to soundnumhack -//struct audiohandle *sndStart(s32 arg0, s16 sound, struct audiohandle **handle, s32 arg3, s32 arg4, f32 arg5, s32 arg6, s32 arg7) +//struct sndstate *sndStart(s32 arg0, s16 sound, struct sndstate **handle, s32 arg3, s32 arg4, f32 arg5, s32 arg6, s32 arg7) //{ // union soundnumhack sp44; // union soundnumhack sp40;