diff options
Diffstat (limited to 'arm9/src')
| -rw-r--r-- | arm9/src/scrcmd.c | 98 | ||||
| -rw-r--r-- | arm9/src/sound.c | 6 | ||||
| -rw-r--r-- | arm9/src/unk_020040F4.c | 35 | ||||
| -rw-r--r-- | arm9/src/unk_020051F4.c | 717 | 
4 files changed, 829 insertions, 27 deletions
| diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 6287579c..c79684a0 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -53,10 +53,12 @@ extern void MOD05_021E1F60(u32 param0);  extern void MOD05_021E26CC(u32 param0, u8 param1);  extern void MOD05_021E2B80(u32 param0, u8 param1);  extern void MOD05_021E2B9C(u32 param0, u8 param1); - -extern u32 FUN_0203B120(struct UnkSavStruct80 *arg, u16 param1); -extern u32 FUN_0205AEA4(u32 param0, const u8 *ptr); -extern void FUN_0203B174(struct UnkSavStruct80 *arg, u32 param1, u32 param2); +extern u32 FUN_0205AEA4(u32 param0, const void *ptr); +extern void FUN_0203B174(struct UnkSavStruct80 *arg, u32 param1, void *param2); +extern u32 FUN_02058B2C(u32 param0); +extern u32 FUN_02058B4C(u32 param0); +extern u32 FUN_020580B4(u32 param0, u32 param1); +extern u32 FUN_02058060(u32 param0, u32 param1);  extern u8 *UNK_020F34E0; @@ -75,6 +77,8 @@ static BOOL FUN_0203AA0C(struct ScriptContext *ctx);  static BOOL FUN_0203AB00(struct ScriptContext *ctx);  static BOOL FUN_0203AD2C(struct ScriptContext *ctx);  static BOOL FUN_0203AD78(struct ScriptContext *ctx); +static u32 FUN_0203B120(struct UnkSavStruct80 *arg, u16 param1); +static BOOL FUN_0203B158(struct ScriptContext *ctx);  extern u8 sScriptConditionTable[6][3]; @@ -1314,6 +1318,90 @@ THUMB_FUNC BOOL ScrCmd_Unk005E(struct ScriptContext *ctx) //ApplyMovement?      u8 *unk5 = FUN_02039438(ctx->unk80, 4);      (*unk5)++; -    FUN_0203B174(ctx->unk80, unk4, 0); +    FUN_0203B174(ctx->unk80, unk4, NULL);      return FALSE;  } + +THUMB_FUNC BOOL ScrCmd_Unk02A1(struct ScriptContext *ctx) +{ +    u32 unk3; //has to be defined first to match +    u16 unk0 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); +    u16 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); +    u16 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + +    unk3 = FUN_0203B120(ctx->unk80, unk0); + +    GF_ASSERT(unk3 != 0); + +    u16 *unk4 = AllocFromHeap(4, 0x100); +    u16 unk5 = (u16)FUN_02058B2C(unk3); +    u16 unk6 = (u16)FUN_02058B4C(unk3); + +    u32 pos = 0; + +    if (unk5 < unk1) +    { +        unk4[0] = 15; +        pos++; +        unk4[1] = unk1 - unk5; +    } +    else if (unk5 > unk1) +    { +        unk4[0] = 14; +        pos++; +        unk4[1] = unk5 - unk1; +    } + +    if (unk6 < unk2) +    { +        unk4[pos * 2] = 12; +        unk4[pos * 2 + 1] = unk2 - unk6; +        pos++; +    } +    else if (unk6 > unk2) +    { +        unk4[pos * 2] = 13; +        unk4[pos * 2 + 1] = unk6 - unk2; +        pos++; +    } + +    unk4[pos * 2] = 254; +    unk4[pos * 2 + 1] = 0; + +    u32 unk7 = FUN_0205AEA4(unk3, unk4); +    u8 *unk8 = FUN_02039438(ctx->unk80, 4); + +    (*unk8)++; + +    FUN_0203B174(ctx->unk80, unk7, unk4); +    return FALSE; +} + +THUMB_FUNC static u32 FUN_0203B120(struct UnkSavStruct80 *arg, u16 param1) +{ +    if (param1 == 242) +    { +        return FUN_020580B4(arg->unk34, 48); +    } +    else if (param1 == 241) +    { +        u32 *res = FUN_02039438(arg, 11); +        return *res; +    } +    else +    { +        return FUN_02058060(arg->unk34, param1); +    } +} + +THUMB_FUNC BOOL ScrCmd_WaitForMovement(struct ScriptContext *ctx) +{ +    SetupNativeScript(ctx, FUN_0203B158); +    return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203B158(struct ScriptContext *ctx) +{ +    u8 *unk = FUN_02039438(ctx->unk80, 4); +    return *unk == 0 ? TRUE : FALSE; +} diff --git a/arm9/src/sound.c b/arm9/src/sound.c index 6efef50a..ec65dd06 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -16,7 +16,6 @@ void GF_InitMic(void);  void GF_SoundDataInit(struct SoundData *);  void FUN_02004088(struct SoundData *);  void FUN_020040A4(struct SoundData *); -void FUN_02003CE8(int);  void FUN_020040DC(void);  extern void FUN_0200521C(int); @@ -255,7 +254,7 @@ u32 * GetSoundPlayer(int playerNo)      return &sdat->players[playerNo];  } -u32 FUN_02004018(u32 a0) +int FUN_02004018(u32 a0)  {      switch (a0)      { @@ -315,6 +314,5 @@ void GF_InitMic(void)  void FUN_020040DC(void)  {      NNS_SndPlayerStopSeqByPlayerNo(7, 0); -    GetSoundPlayer(7); -    NNS_SndHandleReleaseSeq(); +    NNS_SndHandleReleaseSeq(GetSoundPlayer(7));  } diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c index 0cbd5e23..5713ddf0 100644 --- a/arm9/src/unk_020040F4.c +++ b/arm9/src/unk_020040F4.c @@ -15,7 +15,7 @@ extern void FUN_0200541C();  extern void FUN_0200521C(int);  extern void FUN_0200538C(u32, u16, u32);  extern void NNS_SndPlayerPause(u32 *, u8); -extern void NNS_SndPlayerMoveVolume(u32 *, u32, u32); +extern void NNS_SndPlayerMoveVolume(u32 *, s32, s32);  extern void NNS_SndPlayerSetInitialVolume(u32 *, s32);  extern void *NNS_SndArcGetSeqParam(u32);  extern void NNS_SndArcPlayerStartSeqEx(u32 *, u32, s32, s32, u32); @@ -27,9 +27,9 @@ extern u32 MIC_StopAutoSampling();  extern u32 MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3);  extern u32 NNS_SndWaveOutAllocChannel(u32);  extern void NNS_SndWaveOutFreeChannel(u32); -extern u32 NNS_SndWaveOutStart(u32, u32, void *, u32, u32, u32, u32, s32, u32, u32); +extern u32 NNS_SndWaveOutStart(u32, u32, void *, u32, u32, u32, u32, s32, u32, s32);  extern void NNS_SndWaveOutStop(u32); -extern void NNS_SndWaveOutIsPlaying(u32); +extern BOOL NNS_SndWaveOutIsPlaying(u32);  extern void NNS_SndWaveOutSetPan(u32, u32);  extern void NNS_SndWaveOutSetSpeed(u32, u32);  extern void NNS_SndWaveOutSetVolume(u32, s32); @@ -42,10 +42,9 @@ extern void NNS_SndCaptureStopReverb(u32);  extern void NNS_SndCaptureSetReverbVolume(u32, u32);  extern u32 NNS_SndCaptureStartEffect(void *, u32, u32, u32, u32, void (*)(), void *);  extern void NNS_SndCaptureStopEffect(); -extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, u32); -extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); +extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, s32); +extern void NNS_SndPlayerSetTrackPan(u32 *, u32, s32);  extern void NNS_SndSetMonoFlag(u32 param0); -extern void FUN_02003CE8(u32);  extern void FUN_020053CC(u32, u32);  extern u32 NNS_SndArcGetFileAddress(u32);  extern u32 SND_GetWaveDataAddress(u32, u32); @@ -553,7 +552,7 @@ THUMB_FUNC void FUN_02004810()      *ptr2 = 0;  } -THUMB_FUNC void GF_SndPlayerMoveVolume(int playerNo, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerMoveVolume(int playerNo, s32 param1, s32 param2)  {      NNS_SndPlayerMoveVolume(GetSoundPlayer(playerNo), param1, param2);  } @@ -599,7 +598,7 @@ THUMB_FUNC void FUN_02004858(u32 param0, int playerNo)  THUMB_FUNC void FUN_0200488C(u16 param0, u16 param1)  { -    GF_SndPlayerSetInitialVolume((int)FUN_02004018(FUN_020048D0(param0)), param1); +    GF_SndPlayerSetInitialVolume(FUN_02004018(FUN_020048D0(param0)), param1);  }  THUMB_FUNC void GF_SndArcPlayerStartSeqEx(int playerNo, u32 param1, u32 param2) @@ -640,7 +639,7 @@ THUMB_FUNC u32 FUN_020048F4(u16 param0)      return NNS_SndArcGetBankInfo(FUN_02004900(param0));  } -THUMB_FUNC u16 FUN_02004900(u16 param0) +THUMB_FUNC u16 FUN_02004900(u32 param0)  {      u16 *ptr = NNS_SndArcGetSeqParam(param0);      if (ptr == NULL) @@ -794,9 +793,9 @@ THUMB_FUNC void FUN_02004AAC(u32 param0)      NNS_SndWaveOutStop(*(u32 *)FUN_02004930(param0));  } -THUMB_FUNC void FUN_02004ABC(u32 param0) +THUMB_FUNC BOOL FUN_02004ABC(u32 param0)  { -    NNS_SndWaveOutIsPlaying(*(u32 *)FUN_02004930(param0)); +    return NNS_SndWaveOutIsPlaying(*(u32 *)FUN_02004930(param0));  }  THUMB_FUNC void FUN_02004ACC(u32 param0, u32 param1) @@ -825,7 +824,7 @@ THUMB_FUNC void FUN_02004AF8(u32 param0, s32 param1)      NNS_SndWaveOutSetVolume(*(u32 *)FUN_02004930(param0), param1);  } -THUMB_FUNC u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4) +THUMB_FUNC u32 FUN_02004B30(u32 param0, s32 param1, s32 param2, u32 param3, u32 param4)  {      GetSoundDataPointer(); @@ -970,17 +969,17 @@ THUMB_FUNC void FUN_02004D04(s32 param0)      *ptr = (u8)param0;  } -THUMB_FUNC void GF_SndPlayerSetTrackPitch(int playerNo, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerSetTrackPitch(int playerNo, u32 param1, s32 param2)  {      NNS_SndPlayerSetTrackPitch(GetSoundPlayer(playerNo), param1, param2);  } -THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, u32 param2) +THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, s32 param2)  { -    GF_SndPlayerSetTrackPitch((int)FUN_02004018(FUN_020048D0(param0)), param1, param2); +    GF_SndPlayerSetTrackPitch(FUN_02004018(FUN_020048D0(param0)), param1, param2);  } -THUMB_FUNC void GF_SndPlayerSetTrackPan(int playerNo, u32 param1, u32 param2) +THUMB_FUNC void GF_SndPlayerSetTrackPan(int playerNo, u32 param1, s32 param2)  {      NNS_SndPlayerSetTrackPan(GetSoundPlayer(playerNo), param1, param2);  } @@ -991,9 +990,9 @@ THUMB_FUNC void GF_SndSetMonoFlag(u32 param0)      UNK_021C3DD8[0] = param0;  } -THUMB_FUNC void FUN_02004D74(u32 param0) +THUMB_FUNC void FUN_02004D74(s32 param0)  { -    *(u32 *)FUN_02003D38(6) = param0; +    *(s32 *)FUN_02003D38(6) = param0;  }  THUMB_FUNC void FUN_02004D84(u32 param0) diff --git a/arm9/src/unk_020051F4.c b/arm9/src/unk_020051F4.c new file mode 100644 index 00000000..1d3679c8 --- /dev/null +++ b/arm9/src/unk_020051F4.c @@ -0,0 +1,717 @@ +#include "global.h" +#include "unk_020051F4.h" +#include "NNS_SND_arc.h" +#include "constants/species.h" +#include "heap.h" +#include "sound.h" +#include "unk_020040F4.h" +#include "unk_0200CA44.h" + +extern u32 NNS_SndArcPlayerStartSeq(u32 *, u32); +extern u32 NNS_SndArcPlayerStartSeqEx(u32 *, s32, s32, s32, u32); +extern void NNS_SndPlayerStopSeqBySeqNo(u32, u32); +extern void NNS_SndPlayerStopSeqAll(u32); +extern void NNS_SndPlayerStopSeq(u32 *, u32); +extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); +extern u32 FUN_02005D48(u32, u32, u32, u32); +extern void FUN_02005E80(u32); +extern void FUN_02005DFC(); +extern void *FUN_0201B6C8(u32 *); + +THUMB_FUNC u32 FUN_020051F4(u16 param0) +{ +    int playerNo = FUN_02004018(FUN_020048D0(param0)); + +    u32 ret = NNS_SndArcPlayerStartSeq(GetSoundPlayer(playerNo), param0); + +    FUN_0200526C(param0, playerNo); + +    return ret; +} + +THUMB_FUNC u32 FUN_0200521C(u16 param0) +{ +    u8 r4 = FUN_020048D0(param0); +    int playerNo = FUN_02004018(r4); + +    u32 ret; +    if (r4 == 7) +    { +        ret = FUN_02005288(param0, r4, playerNo); +    } +    else if (r4 == 1) +    { +        ret = FUN_020052B8(param0, r4, playerNo); +    } +    else +    { +        GF_AssertFail(); +        return 0; +    } + +    FUN_02004DBC(0); +    FUN_0200526C(param0, playerNo); + +    return ret; +} + +THUMB_FUNC void FUN_0200526C(u16 param0, int playerNo) +{ +    FUN_02004110(param0); +    FUN_02004858(param0, playerNo); + +    FUN_02003CE8(1); +} + +THUMB_FUNC u32 FUN_02005288(u16 param0, u32 param1, int playerNo) +{ +#pragma unused(param1) +    GF_Snd_RestoreState(FUN_02004748(3)); +    GF_Snd_LoadSeq(param0); +    GF_Snd_SaveState(FUN_02003D38(26)); +    return NNS_SndArcPlayerStartSeq(GetSoundPlayer(playerNo), param0); +} + +THUMB_FUNC u32 FUN_020052B8(u16 param0, u32 param1, int playerNo) +{ +#pragma unused(param1) +    FUN_02003D38(18); +    u16 *r4 = FUN_02003D38(31); + +    FUN_020045C4(param0, FUN_02004900(GF_SndPlayerGetSeqNo(GetSoundPlayer(0)))); + +    return NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(playerNo), -1, FUN_02004900(*r4), -1, param0); +} + +THUMB_FUNC u32 FUN_02005308(u32 param0, u16 param1) +{ +    if (param0 != 4) +    { +        GF_AssertFail(); +        return 0; +    } + +    if (FUN_020048D0(param1) != 7) +    { +        GF_AssertFail(); +        return 0; +    } + +    GF_Snd_LoadSeqEx(param1, 1); + +    u32 r4 = NNS_SndArcPlayerStartSeq(GetSoundPlayer(7), param1); +    FUN_02004110(param1); +    FUN_02003CE8(1); + +    return r4; +} + +THUMB_FUNC void FUN_02005350(u16 param0, u32 param1) +{ +    NNS_SndPlayerStopSeqBySeqNo(param0, param1); + +    u8 r0 = FUN_020048D0(param0); +    if (r0 != 0xff) +    { +        NNS_SndHandleReleaseSeq(GetSoundPlayer(FUN_02004018(r0))); +    } + +    FUN_02005374(); +} + +THUMB_FUNC void FUN_02005374() +{ +    FUN_02004110(0); +    FUN_02004130(0); +    FUN_02003CE8(0); +} + +THUMB_FUNC void FUN_0200538C(s32 param0, u16 param1, u32 param2) +{ +    u8 r0 = FUN_020048D0(FUN_02004124()); +    if (r0 == 0xff) +    { +        return; +    } + +    int playerNo = FUN_02004018(r0); +    if (param2 == 0) +    { +        GF_SndPlayerMoveVolume(playerNo, 0, 0); +    } + +    GF_SndPlayerMoveVolume(playerNo, param0, param1); +    FUN_02004D74(param1); +    FUN_02003CE8(3); +} + +THUMB_FUNC void FUN_020053CC(s32 param0, s32 param1) +{ +    u8 r6 = FUN_020048D0(FUN_02004124()); +    if (r6 == 0xff) +    { +        return; +    } + +    if (!FUN_02005404()) +    { +        GF_SndPlayerMoveVolume(FUN_02004018(r6), param0, param1); +        FUN_02004D74(param1); +    } + +    FUN_02003CE8(4); +} + +THUMB_FUNC u16 FUN_02005404() +{ +    return *(u16 *)FUN_02003D38(6); +} + +THUMB_FUNC u16 FUN_02005410(u16 param0) +{ +    return GF_SndPlayerCountPlayingSeqByPlayerNo(FUN_020048D0(param0)); +} + +THUMB_FUNC void FUN_0200541C() +{ +    u8 *r5 = FUN_02003D38(15); +    u8 *r4 = FUN_02003D38(16); +    NNS_SndPlayerStopSeqAll(0); + +    if (*r5 == 1) +    { +        FUN_02004AAC(14); +    } + +    if (*r4 == 1) +    { +        FUN_02004AAC(15); +    } + +    FUN_02003CE8(0); +} + +THUMB_FUNC void FUN_02005454() +{ +    u8 *r5 = FUN_02003D38(15); +    u8 *r4 = FUN_02003D38(16); + +    NNS_SndPlayerStopSeq(GetSoundPlayer(7), 0); +    FUN_02005374(); + +    for (s32 i = 0; i < 4; i++) +    { +        FUN_020054F8(i + 3, 0); +    } + +    FUN_02005614(0); + +    if (*r5 == 1) +    { +        FUN_02004AAC(14); +    } + +    if (*r4 == 1) +    { +        FUN_02004AAC(15); +    } +} + +THUMB_FUNC u32 FUN_020054A8(u16 param0, u32 param1) +{ +    u32 r6 = PlaySE(param0); +    FUN_02005530(param0, 0xFFFF, param1); + +    return r6; +} + +THUMB_FUNC u32 PlaySE(u16 param0) +{ +    int playerNo = FUN_02004018(FUN_020048D0(param0)); + +    u32 r6 = NNS_SndArcPlayerStartSeq(GetSoundPlayer(playerNo), param0); +    FUN_02004858(param0, playerNo); + +    return r6; +} + +THUMB_FUNC void FUN_020054F0(u32 param0, u32 param1) +{ +    NNS_SndPlayerStopSeqBySeqNo(param0, param1); +} + +THUMB_FUNC void FUN_020054F8(s32 param0, u32 param1) +{ +    NNS_SndPlayerStopSeq(GetSoundPlayer(param0), param1); +} + +THUMB_FUNC u16 FUN_02005508(u16 param0) +{ +    return GF_SndPlayerCountPlayingSeqByPlayerNo(FUN_020048D0(param0)); +} + +THUMB_FUNC BOOL FUN_02005514() +{ +    for (s32 i = 0; i < 4; i++) +    { +        if (GF_SndPlayerCountPlayingSeqByPlayerNo(i + 3) == 1) +        { +            return TRUE; +        } +    } + +    return FALSE; +} + +THUMB_FUNC void FUN_02005530(u16 param0, u32 param1, u32 param2) +{ +    NNS_SndPlayerSetTrackPan(GetSoundPlayer(FUN_02004018(FUN_020048D0(param0))), param1, param2); +} + +THUMB_FUNC void FUN_0200554C(u32 param0) +{ +    int playerNo = FUN_02004018(3); + +    for (int i = 0; i < 4; i++) +    { +        NNS_SndPlayerSetTrackPan(GetSoundPlayer(playerNo + i), 0xFFFF, param0); +    } +} + +THUMB_FUNC u32 FUN_02005578(u16 species) +{ +    u8 *r4 = FUN_02003D38(17); +    u32 *r0 = FUN_02003D38(35); + +    if (species != SPECIES_CHATOT) +    { +        if (species > SPECIES_MANAPHY_EGG || species == SPECIES_NONE) +        { +            species = SPECIES_BULBASAUR; +        } +    } + +    if (species == SPECIES_CHATOT) +    { +        if (FUN_02005D48(*r0, 0, 127, 0) == 1) +        { +            FUN_02005E80(0); + +            return 1; +        } +    } + +    u32 res; +    if (*r4 == 0) +    { +        FUN_02005614(0); +        res = NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(1), -1, species, -1, 2); +        FUN_02004858(species, 1); +    } +    else +    { +        res = NNS_SndArcPlayerStartSeqEx(GetSoundPlayer(8), -1, species, -1, 2); +        FUN_02004858(species, 8); +    } + +    FUN_02005E80(0); + +    return res; +} + +THUMB_FUNC void FUN_02005614(u32 param0) +{ +    u8 *r6 = FUN_02003D38(15); +    u8 *r4 = FUN_02003D38(16); +    FUN_02003D38(14); + +    NNS_SndPlayerStopSeq(GetSoundPlayer(1), param0); +    NNS_SndPlayerStopSeq(GetSoundPlayer(8), param0); + +    if (*r6 == 1) +    { +        FUN_02004C3C(14); +        FUN_02004A04(14); +    } + +    if (*r4 == 1) +    { +        FUN_02004C3C(15); +        FUN_02004A04(15); +    } + +    FUN_02005DFC(); +} + +THUMB_FUNC BOOL FUN_02005670() +{ +    u8 *r5 = FUN_02003D38(15); +    u8 *r4 = FUN_02003D38(16); +    FUN_02003D38(14); + +    if (*r5 == 1) +    { +        return FUN_02004ABC(14); +    } + +    if (*r4 == 1) +    { +        return FUN_02004ABC(15); +    } + +    return GF_SndPlayerCountPlayingSeqByPlayerNo(0); +} + +THUMB_FUNC u32 FUN_020056AC(u32 param0, u16 param1, s32 param2, s32 param3, u32 param4) +{ +    s32 st1c, st18; +    u8 *st14 = FUN_02003D38(15); +    u8 *st10 = FUN_02003D38(16); +    u8 *r4 = FUN_02003D38(17); +    u8 *stc = FUN_02003D38(29); +    FUN_02003D38(35); + +    st1c = 64 + (param2 / 2); +    st18 = param3 - 30; + +    if (st18 <= 0) +    { +        st18 = 1; +    } + +    *r4 = 0; +    if (*st14 == 1) +    { +        FUN_02004C3C(14); +        FUN_02004A04(14); +    } + +    if (*st10 == 1) +    { +        FUN_02004C3C(15); +        FUN_02004A04(15); +    } + +    u16 species = param1; +    if (species != SPECIES_CHATOT) +    { +        if (species > SPECIES_MANAPHY_EGG || species == SPECIES_NONE) +        { +            species = SPECIES_BULBASAUR; +        } +    } + +    if (param1 == SPECIES_CHATOT) +    { +        switch (param0) +        { +            case 0: +            case 1: +            case 2: +            case 5: +            case 11: +            case 12: +                FUN_02005578(SPECIES_CHATOT); +                if (*stc == 0) +                { +                    GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +                    FUN_02005AC8(species, 1, param3); +                } +                else +                { +                    FUN_02004ACC(14, (u8)st1c); +                    FUN_02004AF8(14, param3); +                } + +                return 1; + +            default: +                FUN_02005E80(1); +        } +    } + +    switch (param0) +    { +        case 0: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            break; +        case 1: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            FUN_02005AE0(20, param4); +            break; +        case 2: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, 64); +            FUN_02005BC8(species, 20); +            GF_SndPlayerSetTrackPan(8, 0xFFFF, param2); +            FUN_02005AC8(species, 8, st18); +            break; +        case 3: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            FUN_02005AE0(30, param4); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, 192); +            FUN_02005BC8(species, 16); +            GF_SndPlayerSetTrackPan(8, 0xFFFF, param2); +            FUN_02005AC8(species, 8, st18); +            break; +        case 4: +            FUN_02004984(14); +            FUN_02004B30(species, param3, st1c, 14, param4); +            FUN_02004ACC(14, (u8)st1c); +            FUN_02005AE0(15, param4); +            FUN_02004AE4(14, 34304); +            FUN_02005BF8(species, -64, st18, st1c, param4); +            FUN_02004AE4(15, 34304); +            break; +        case 5: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, -224); +            break; +        case 6: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, 44); +            FUN_02005BC8(species, -64); +            GF_SndPlayerSetTrackPan(8, 0xFFFF, param2); +            FUN_02005AC8(species, 8, st18); +            break; +        case 7: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            FUN_02005AE0(11, param4); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, -128); +            break; +        case 8: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            FUN_02005AE0(60, param4); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, 60); +            break; +        case 9: +            FUN_02004984(14); +            FUN_02004B30(species, param3, st1c, 14, param4); +            FUN_02004ACC(14, (u8)st1c); +            FUN_02005AE0(13, param4); +            FUN_02004AE4(14, 26624); +            break; +        case 10: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            FUN_02005AE0(100, param4); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, -44); +            break; +        case 11: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, -96); +            break; +        case 12: +            FUN_02005578(species); +            GF_SndPlayerSetTrackPan(1, 0xFFFF, param2); +            FUN_02005AC8(species, 1, param3); +            FUN_02005AE0(20, param4); +            GF_SndPlayerSetTrackPitch(1, 0xFFFF, -96); +            break; +        case 13: +            FUN_02005578(species); +            FUN_02005AC8(species, 1, 127); +            FUN_02005BC8(species, 20); +            GF_SndPlayerSetTrackPan(8, 0xFFFF, param2); +            GF_SndPlayerMoveVolume(8, param3, 0); +            break; +        case 14: +            FUN_02005578(species); +            break; +    } + +    return 1; +} + +THUMB_FUNC void FUN_02005AC8(u32 param0, int playerNo, s32 param2) +{ +    GF_SndPlayerSetInitialVolume(playerNo, param2); +    FUN_02004858(param0, playerNo); +} + +THUMB_FUNC void FUN_02005AE0(u32 param0, u32 param1) +{ +    u32 *r6 = FUN_02003D38(34); +    FUN_02005BA0(); + +    u32 *ptr = AllocFromHeap(param1, 2 * sizeof(u32)); +    if (ptr == NULL) +    { +        GF_AssertFail(); +        return; +    } + +    ((u8 *)ptr)[0] = 0; +    ((u8 *)ptr)[1] = 0; +    ((u8 *)ptr)[2] = 0; +    ((u8 *)ptr)[3] = 0; +    ((u8 *)ptr)[4] = 0; +    ((u8 *)ptr)[5] = 0; +    ((u8 *)ptr)[6] = 0; +    ((u8 *)ptr)[7] = 0; + +    ptr[0] = param0; +    u32 r0 = (u32)FUN_0200CA44( +        (void (*)(u32, struct TextPrinter *))FUN_02005B2C, (struct TextPrinter *)ptr, 0); +    ptr[1] = r0; +    *r6 = r0; +} + +THUMB_FUNC void FUN_02005B2C(u32 param0, s32 *param1) +{ +#pragma unused(param0) +    u8 *r6 = FUN_02003D38(15); +    u8 *r4 = FUN_02003D38(16); + +    if (*param1 == 10) +    { +        GF_SndPlayerMoveVolume(1, 0, *param1); +        GF_SndPlayerMoveVolume(8, 0, *param1); +    } + +    (*param1)--; + +    if (!FUN_02005670()) +    { +        *param1 = 0; +    } + +    if (*param1 <= 0) +    { +        FUN_02005614(0); +        if (*r6 == 1) +        { +            FUN_02004C3C(14); +            FUN_02004A04(14); +        } +        if (*r4 == 1) +        { +            FUN_02004C3C(15); +            FUN_02004A04(15); +        } + +        FUN_02005BA0(); +    } +} + +THUMB_FUNC void FUN_02005BA0() +{ +    u32 **r4 = FUN_02003D38(34); +    if (*r4 != NULL) +    { +        void *r5 = FUN_0201B6C8(*r4); +        FUN_0200CAB4((s32)(*r4)); +        FreeToHeap(r5); +    } + +    *r4 = 0; +} + +THUMB_FUNC u32 FUN_02005BC8(u16 param0, s32 param1) +{ +    *(u8 *)FUN_02003D38(17) = 1; + +    FUN_02005E80(1); +    u32 res = FUN_02005578(param0); + +    GF_SndPlayerSetTrackPitch(8, 0xFFFF, param1); + +    return res; +} + +THUMB_FUNC void FUN_02005BF8(u32 param0, s32 param1, s32 param2, s32 param3, u32 param4) +{ +#pragma unused(param1) +    *(u8 *)FUN_02003D38(17) = 1; + +    FUN_02004984(15); +    FUN_02004B30(param0, param2, param3, 15, param4); +} + +THUMB_FUNC u32 PlaySound(u16 param0) +{ +    FUN_020048F4(param0); +    FUN_02005CEC(param0); + +    u8 r0 = FUN_020048D0(FUN_02004124()); +    if (r0 != 0xff) +    { +        FUN_020047C8(r0, 1); +    } + +    GF_Snd_SaveState((int *)FUN_02003D38(28)); +    GF_Snd_LoadSeqEx(param0, 3); +    u32 res = NNS_SndArcPlayerStartSeq(GetSoundPlayer(2), param0); +    FUN_02004858(param0, 2); + +    return res; +} + +THUMB_FUNC BOOL FUN_02005C74() +{ +    u16 *r4 = FUN_02003D38(13); + +    if (GF_SndPlayerCountPlayingSeqByPlayerNo(2) != 0) +    { +        return TRUE; +    } + +    if (*r4 != 0) +    { +        (*r4)--; +        return TRUE; +    } + +    return FALSE; +} + +THUMB_FUNC void FUN_02005CA0(u32 param0) +{ +    NNS_SndPlayerStopSeq(GetSoundPlayer(2), param0); +    GF_Snd_RestoreState(FUN_02004748(6)); +} + +THUMB_FUNC BOOL FUN_02005CBC() +{ +    FUN_02003D38(13); + +    if (FUN_02005C74() == TRUE) +    { +        return TRUE; +    } + +    FUN_02005CA0(0); +    u8 r0 = FUN_020048D0(FUN_02004124()); + +    if (r0 != 0xff) +    { +        FUN_020047C8(r0, 0); +    } + +    return FALSE; +} + +THUMB_FUNC void FUN_02005CEC(u16 param0) +{ +#pragma unused(param0) +    *(u16 *)FUN_02003D38(13) = 15; +} | 
