diff --git a/configure.py b/configure.py index ea3fbeca..03ad0f4a 100644 --- a/configure.py +++ b/configure.py @@ -702,7 +702,7 @@ config.libs = [ Object(Matching, "jaudio_NES/game/audioheaders.c"), Object(Matching, "jaudio_NES/game/dummyprobe.c"), Object(Matching, "jaudio_NES/game/emusound.c", extra_cflags=["-O4,s", "-fp_contract on", "-func_align 32", "-vector on"]), - Object(NonMatching, "jaudio_NES/game/game64.c"), + Object(Matching, "jaudio_NES/game/game64.c"), Object(Matching, "jaudio_NES/game/kappa.c"), Object(Matching, "jaudio_NES/game/melody.c"), Object(Matching, "jaudio_NES/game/radio.c"), diff --git a/include/MSL_C/printf.h b/include/MSL_C/printf.h index 4cfdde61..aa712edd 100644 --- a/include/MSL_C/printf.h +++ b/include/MSL_C/printf.h @@ -3,6 +3,7 @@ #include "types.h" // #include "va_args.h" +#include "libc/stdarg.h" #ifdef __cplusplus extern "C" { diff --git a/include/audio.h b/include/audio.h index 6d3e5974..04ef9148 100644 --- a/include/audio.h +++ b/include/audio.h @@ -65,7 +65,7 @@ extern void sAdo_PlyWalkSeRoom(u8 walk, const xyz_t* pos); extern void sAdo_NpcWalkSe(u16 se_no, const xyz_t* pos); extern void sAdo_NpcWalkSeRoom(u8 se_no, const xyz_t* pos); -extern void sAdo_PlayerStatusLevel(f32 speed, int p); +extern void sAdo_PlayerStatusLevel(u8 dash, f32 speed); /* Not sure about the last param name */ extern void sAdo_VoiceSe(u8 num, u8 num2, u8 num3, s16 character_idx, u8 scale, u8 mode); @@ -103,7 +103,7 @@ extern s8 sAdo_InstCountGet(); extern void sAdo_RhythmPos(u32 id, u8 haniwa_id, const xyz_t* pos); extern void sAdo_SpecChange(int spec); -extern void sAdo_MDPlayerPos(const xyz_t* pos, u16 s1, u16 s2, int p); +extern void sAdo_MDPlayerPos(const xyz_t* pos, u16 s1, u16 s2, u32 p); extern void sAdo_BGMVolume(f32 f, u16 volume); extern void sAdo_BgmCrossfadeStart(u8 b); @@ -141,7 +141,7 @@ extern u16 sAdo_Get_WalkLabel(int type); extern u16 sAdo_Get_KokeruLabel(int type); extern void sAdo_SceneMode(u8 mode); -extern u8 sAdo_RoomIncectPos(u32 f, u16 u, const xyz_t* pos); +extern u8 sAdo_RoomIncectPos(u32 f, u8 u, const xyz_t* pos); extern void sAdo_FurnitureInstPos(u32 id, const xyz_t* pos); extern void sAdo_Set_ongenpos_refuse_fg(int state); diff --git a/include/jaudio_NES/OSAttention.h b/include/jaudio_NES/OSAttention.h new file mode 100644 index 00000000..45c0109b --- /dev/null +++ b/include/jaudio_NES/OSAttention.h @@ -0,0 +1,14 @@ +#ifndef OSATTENTION_H_ +#define OSATTENTION_H_ + +#ifdef __cplusplus +extern "C" { +#endif // !__cplusplus + +int OSAttention(const char* c, ...); + +#ifdef __cplusplus +} +#endif // !__cplusplus + +#endif // !OSATTENTION_H_ diff --git a/include/jaudio_NES/aramcall.h b/include/jaudio_NES/aramcall.h index 654327a7..e4f14bdc 100644 --- a/include/jaudio_NES/aramcall.h +++ b/include/jaudio_NES/aramcall.h @@ -1,6 +1,11 @@ #ifndef ARAMCALL_H #define ARAMCALL_H #include "types.h" -void Jac_WaveDirectorySet(char*); +#include "jaudio_NES/heapctrl.h" -#endif \ No newline at end of file +void Jac_WaveDirectorySet(char*); +void Jac_RegisterARAMCallback(u32 (*callback)(char*, u32, u32, u32*, JAHEAP*)); +void Init_AramMotherHeap(); +JAHEAP* Get_AramMotherHeap(); + +#endif diff --git a/include/jaudio_NES/dummyrom.h b/include/jaudio_NES/dummyrom.h index 76d8be69..c4084e9e 100644 --- a/include/jaudio_NES/dummyrom.h +++ b/include/jaudio_NES/dummyrom.h @@ -9,12 +9,12 @@ #define DUMMYROM_ARAM_TO_DRAM 1 extern u8* JAC_ARAM_DMA_BUFFER_TOP; -ALHeap aram_hp; /* placed in common bss */ +extern ALHeap aram_hp; /* placed in common bss */ extern u32 GetNeos_FileTop(void); extern u32 GetNeosRomTop(void); extern u32 GetNeosRom_PreLoaded(void); -extern void SetPreCopy_NeosRom(u8* load_addr, u32 load_size, BOOL cut_flag); +extern u32 SetPreCopy_NeosRom(u8* load_addr, u32 load_size, BOOL cut_flag); extern BOOL ARAMStartDMAmesg(u32 dir, u32 dramAddr, u32 aramAddr, u32 size, s32 unused, OSMesgQueue* mq); extern void Jac_SetAudioARAMSize(u32 size); extern void ARAllocFull(u32* outSize); diff --git a/include/jaudio_NES/dvdthread.h b/include/jaudio_NES/dvdthread.h index f05e6c8f..b2750edc 100644 --- a/include/jaudio_NES/dvdthread.h +++ b/include/jaudio_NES/dvdthread.h @@ -20,7 +20,7 @@ extern s32 DVDT_DRAMtoARAM_Main(void* arg); extern s32 DVDT_ARAMtoDRAM(u32 owner, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback); extern s32 DVDT_DRAMtoARAM(u32 owner, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback); extern s32 DVDT_CheckFile(char* file); -extern void DVDT_CheckPass(u32 owner, u32* status, Jac_DVDCallback callback); +extern s32 DVDT_CheckPass(u32 owner, u32* status, Jac_DVDCallback callback); extern s32 Jac_CheckFile(char* file); extern void Jac_RegisterDVDErrorCallback(ErrorCallback callback); extern s32 Jac_RegisterFastOpen(char* file); diff --git a/include/jaudio_NES/game64.h b/include/jaudio_NES/game64.h index 7805c134..120e1379 100644 --- a/include/jaudio_NES/game64.h +++ b/include/jaudio_NES/game64.h @@ -2,14 +2,21 @@ #define GAME64_H #include "types.h" +#include "libc/stdarg.h" #ifdef __cplusplus extern "C" { #endif +f32 distance2vol4KITEKI(f32); +f32 distance2vol4MD(f32); + extern void Na_InitAudio(void (*fatal_callback)(), u8* load_addr, size_t load_size, u8* bootsound, size_t bootsound_size, BOOL cut_flag); extern void Na_GameFrame(); +extern void Na_Reset(); +extern void Na_SoftReset(); +extern void Na_Tenki(u8); extern void Na_BgmStart(u8); extern void Na_BgmCrossfadeStart(u8); extern void Na_BgmStop(u16); @@ -18,49 +25,60 @@ extern void Na_PlyWalkSe(u16, u16, f32); extern void Na_PlyWalkSeRoom(u8, u16, f32); extern void Na_NpcWalkSe(u16, u16, f32); extern void Na_NpcWalkSeRoom(u8, u16, f32); -extern void Na_PlayerStatusLevel(f32, int); +// #ifdef BUGFIXES +extern void Na_PlayerStatusLevel(u8, f32); +// #endif // BUGFIXES extern void Na_VoiceSe(u8, u8, u8, s16, u8, u8); extern void Na_MessageStatus(u8); extern void Na_MessageSpeed(u8); extern u8 Na_MessageSpeedGet(); -extern void Na_SysLevStart(u8); -extern void Na_SysLevStop(u8); extern void Na_OngenPos(u32, u8, u16, f32); +extern void Na_OngenTrgStartSpeed(u16, u16, f32, f32); extern void Na_OngenTrgStart(u16, u16, f32); extern void Na_SetOutMode(u8); extern void Na_SetVoiceMode(u8); extern void Na_FloorTrgStart(u8, u16, f32); +extern void Na_SysLevStart(u8); +extern void Na_SysLevStop(u8); extern void Na_Pause(u8); extern void Na_RhythmPos(u32, u8, u16, f32); extern void Na_SpecChange(int); -extern void Na_MDPlayerPos(u16, u16, u16, int, f32); +extern void Na_MDPlayerPos(u16 a, f32 e, u16 b, u16 c, u32 d); extern void Na_BGMVolume(f32, u16); -extern void Na_SubGameStart(); -extern void Na_SubGameEnd(); +extern void Na_RestartPrepare(); +extern u8 Na_CheckRestartReady(); +extern void Na_Restart(); extern u8 Na_SubGameOK(); -extern void Na_Tenki(u8); extern void Na_KishaStatusTrg(u8); extern void Na_KishaStatusLevel(f32 speed, u32 ongenNum1, u16 angle1, f32 distance1, u32 ongenNum2, u16 angle2, f32 distance2); extern void Na_TTKK_ARM(u8); -extern void Na_OngenTrgStartSpeed(u16, u16, f32, f32); +extern void Na_BgmMuteClear(); +extern u8 Na_BgmFadeoutCheck(); +extern u8 Na_SeFadeoutCheck(); +extern void Na_BgmTrOn(u8 a); +extern void Na_BgmTrOff(u8 a); +extern void Na_SubGameStart(); +extern void Na_SubGameEnd(); +extern void Na_SceneMode(u8); +extern u8 Na_RoomIncectPos(int, u8, u16, f32); +extern void Na_FurnitureInstPos(int, u16, f32); extern void Na_TrgSeEcho(u8); extern void Na_LevSeEcho(u8); -extern void Na_BgmFadeoutCheck(); -extern void Na_SeFadeoutCheck(); +extern void Na_BGMFilter(u8); extern void Na_RoomType(u8); +extern u8 Na_CheckNeosBoot(); extern void Na_Museum(u8); -extern void Na_SoftReset(); -extern void Na_SceneMode(u8); -extern u8 Na_RoomIncectPos(int, u16, u16, f32); -extern void Na_FurnitureInstPos(int, u16, f32); extern int Na_GetSoundFrameCounter(); extern void Na_kazagurumaLevel(f32); -extern u8 Na_CheckNeosBoot(); -extern void Na_RestartPrepare(); -extern u8 Na_CheckRestartReady(); -extern void Na_Restart(); -extern void Na_Reset(); + +// __declspec(weak) extern int OSAttention(const char* msg, ...) { +// va_list marker; + +// va_start(marker, msg); + +// return vprintf(msg, marker); +// } extern u8 sou_now_bgm_handle; extern u8 sou_chime_status; diff --git a/include/jaudio_NES/game64_cpp.h b/include/jaudio_NES/game64_cpp.h index 8636a786..19fae28d 100644 --- a/include/jaudio_NES/game64_cpp.h +++ b/include/jaudio_NES/game64_cpp.h @@ -5,7 +5,49 @@ #include "jaudio_NES/game64.h" /* C++ linkage */ +extern void Sou_lev_ongen_data_struct_clear(); +extern void Sou_BgmFadeoutEndCheck(); +extern u8 Sou_BgmTenkiConv(u8); +extern void Sou_GroupControl(u8, u8, f32); +extern void Sou_GroupControl_MD(u8, u8, f32); +extern u8 pan_kochou(u8, f32); extern u8 angle2pan(u16 angle, f32 dist); extern f32 distance2vol(f32 distance); - +extern void Sou_VoiceStart(u8, u8); +extern void Sou_TrgStart(u16, f32, f32, f32, u8, u8, f32); +extern void Sou_SpecialRoutine00(); +extern void Sou_SpecialRoutine02(); +extern void Sou_SpecialRoutine03(); +extern void Sou_TrgEndCheck(); +extern void Sou_LevStart(u8, u8); +extern void Sou_LevStop(u8, u8); +extern void Sou_TrgMake(u8); +extern void Sou_VoiceMake(u8); +extern void Sou_LevMake(u8); +extern void Sou_ChimeMake(); +extern void Sou_LevSet(u8); +extern void Sou_Insect_Lev_Cont(); +extern void Sou_Ongen_Lev_Cont(); +extern void Sou_Ongen_Lev_Prog(u8); +extern void Sou_BgmStart(u8, u16); +extern void Sou_BGMVolMove(); +extern void Sou_Na_BgmStart(u8); +extern void Sou_Na_BgmStop(u16); +extern void Sou_SpecialRoutine06(); +extern void Sou_SpecialRoutine07(); +extern void Sou_SeFadeoutRoutine(); +extern void Sou_SeFadeinRoutine(); +extern void Sou_SeVolumeReset(); +extern void Sou_SeTrFadeout(u8, u16); +extern void Sou_SeFadeout(u16); +extern void Sou_SpecialRoutine08(); +extern void Sou_SpecialRoutine10(); +extern void Sou_InitAudio(); +extern void Sou_DVD_Error(char*, u8*); +extern void Sou_WalkSe(u16, u16, f32, u8, f32); +extern u8 Sou_TanboinHenkan(u8, u8); +extern u8 Sou_ChouboinHenkan(u8, u8); +extern u8 Sou_ConnectCheck(u8, u8, u8); +extern u8 Sou_BoinShiinCheck(u8); +extern void Sou_PosTrgStart(u16, u16, f32, u8, f32); #endif diff --git a/include/jaudio_NES/heapctrl.h b/include/jaudio_NES/heapctrl.h new file mode 100644 index 00000000..a7de7d85 --- /dev/null +++ b/include/jaudio_NES/heapctrl.h @@ -0,0 +1,13 @@ +#ifndef HEAPCTRL_H +#define HEAPCTRL_H +#include "types.h" + +typedef struct jaheap_ { + void* _00; + void* _04; + void* _08; +} JAHEAP; + +JAHEAP* Jac_AllocHeap(jaheap_*, jaheap_*, unsigned long); + +#endif diff --git a/include/jaudio_NES/melody.h b/include/jaudio_NES/melody.h index b0bed689..5e8b05b9 100644 --- a/include/jaudio_NES/melody.h +++ b/include/jaudio_NES/melody.h @@ -15,7 +15,7 @@ extern s16 Na_MelodyGetSubTrackNum(s16 inst); extern void Na_FurnitureInst(u32 id, u8 inst, u8* melody, u16 angle, f32 dist); extern void Na_MelodyVoice(s16 voice); -extern u32 na_melody_id_hist[]; +extern u32 na_melody_id_hist[2]; #ifdef __cplusplus } diff --git a/include/jaudio_NES/seqsetup.h b/include/jaudio_NES/seqsetup.h index f8ea8ad2..58299e9e 100644 --- a/include/jaudio_NES/seqsetup.h +++ b/include/jaudio_NES/seqsetup.h @@ -9,10 +9,11 @@ extern "C" { typedef struct seqp seqp; // TODO void Jaq_Reset(void); -void Jaq_SetSeqData(seqp* seqp, u8* param_2, u32 param_3, int param_4); +s32 Jaq_SetSeqData(seqp* seqp, u8* param_2, u32 param_3, int param_4); +s32 Jaq_StartSeq(u8); #ifdef __cplusplus } #endif -#endif \ No newline at end of file +#endif diff --git a/include/jaudio_NES/wave_read.h b/include/jaudio_NES/wave_read.h new file mode 100644 index 00000000..91fd3c18 --- /dev/null +++ b/include/jaudio_NES/wave_read.h @@ -0,0 +1,8 @@ +#ifndef WAVEREAD_H +#define WAVEREAD_H +#include "types.h" + +int WaveScene_Set(u32, u32); +void Wavegroup_Init(); +int Wavegroup_Regist(void*, u32); +#endif diff --git a/include/libc/stdio.h b/include/libc/stdio.h index 394a43e1..86e27b2f 100644 --- a/include/libc/stdio.h +++ b/include/libc/stdio.h @@ -3,6 +3,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { int unk0; @@ -31,4 +35,8 @@ int sprintf(char *s, const char *format, ...); int vprintf(const char *format, va_list arg); int vsprintf(char *s, const char *format, va_list arg); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/audio.c b/src/audio.c index 8cddb73f..c9e712d3 100644 --- a/src/audio.c +++ b/src/audio.c @@ -14,7 +14,6 @@ int S_ongenpos_refuse_fg; static void sAdo_Calc_MicPosition_common(f32* fcalc, u16* scalc, const xyz_t* pos) { - f32 diff; xyz_t posd; xyz_t* camera_pos; @@ -36,12 +35,10 @@ static void sAdo_Calc_MicPosition_common(f32* fcalc, u16* scalc, const xyz_t* po } extern void sAdo_Calc_MicPosition_forTrig(f32* fcalc, u16* scalc, const xyz_t* pos) { - sAdo_Calc_MicPosition_common(fcalc, scalc, pos); } extern void sAdo_Calc_MicPosition_forLevel(f32* fcalc, u16* scalc, const xyz_t* pos) { - sAdo_Calc_MicPosition_common(fcalc, scalc, pos); } @@ -61,7 +58,6 @@ extern void sAdo_SysTrgStart(u16 id) { } extern void sAdo_PlyWalkSe(u16 walk, const xyz_t* pos) { - f32 fcalc; u16 scalc; sAdo_Calc_MicPosition_forTrig(&fcalc, &scalc, pos); @@ -70,7 +66,6 @@ extern void sAdo_PlyWalkSe(u16 walk, const xyz_t* pos) { } extern void sAdo_PlyWalkSeRoom(u8 walk, const xyz_t* pos) { - f32 fcalc; u16 scalc; sAdo_Calc_MicPosition_forTrig(&fcalc, &scalc, pos); @@ -79,7 +74,6 @@ extern void sAdo_PlyWalkSeRoom(u8 walk, const xyz_t* pos) { } extern void sAdo_NpcWalkSe(u16 se_no, const xyz_t* pos) { - f32 fcalc; u16 scalc; sAdo_Calc_MicPosition_forTrig(&fcalc, &scalc, pos); @@ -88,7 +82,6 @@ extern void sAdo_NpcWalkSe(u16 se_no, const xyz_t* pos) { } extern void sAdo_NpcWalkSeRoom(u8 se_no, const xyz_t* pos) { - f32 fcalc; u16 scalc; sAdo_Calc_MicPosition_forTrig(&fcalc, &scalc, pos); @@ -96,13 +89,11 @@ extern void sAdo_NpcWalkSeRoom(u8 se_no, const xyz_t* pos) { Na_NpcWalkSeRoom(se_no, scalc, fcalc); } -extern void sAdo_PlayerStatusLevel(f32 speed, int p) { - - Na_PlayerStatusLevel(speed, p); +extern void sAdo_PlayerStatusLevel(u8 dash, f32 speed) { + Na_PlayerStatusLevel(dash, speed); } extern void sAdo_VoiceSe(u8 num, u8 num2, u8 num3, s16 character_idx, u8 scale, u8 mode) { - Na_VoiceSe(num, num2, num3, character_idx, scale, mode); } @@ -111,32 +102,26 @@ extern void sAdo_Inst(u16 num, u8* p) { } extern void sAdo_MessageStatus(u8 status) { - Na_MessageStatus(status); } extern void sAdo_MessageSpeed(u8 speed) { - Na_MessageSpeed(speed); } extern u8 sAdo_MessageSpeedGet() { - return Na_MessageSpeedGet(); } extern void sAdo_SysLevStart(u8 id) { - Na_SysLevStart(id); } extern void sAdo_SysLevStop(u8 id) { - Na_SysLevStop(id); } extern void sAdo_OngenPos(u32 p1, u8 p2, const xyz_t* pos) { - u16 scalc; f32 fcalc; @@ -147,7 +132,6 @@ extern void sAdo_OngenPos(u32 p1, u8 p2, const xyz_t* pos) { } extern void sAdo_OngenTrgStart(u16 id, const xyz_t* pos) { - u16 scalc; f32 fcalc; @@ -156,7 +140,6 @@ extern void sAdo_OngenTrgStart(u16 id, const xyz_t* pos) { } extern void sAdo_SetOutMode(u8 mode) { - if (OSGetSoundMode() == 0) { Na_SetOutMode(1); } else if (mode == 1) { @@ -167,12 +150,10 @@ extern void sAdo_SetOutMode(u8 mode) { } extern void sAdo_SetVoiceMode(u8 mode) { - Na_SetVoiceMode(mode); } extern void sAdo_FloorTrgStart(u8 id, const xyz_t* pos) { - u16 scalc; f32 fcalc; @@ -181,22 +162,18 @@ extern void sAdo_FloorTrgStart(u8 id, const xyz_t* pos) { } extern void sAdo_RhythmStart(u32 p, s8 type, s8 wait) { - Na_RhythmStart(p, type, wait); } extern void sAdo_RhythmStop(u32 p) { - Na_RhythmStop(p); } extern void sAdo_RhythmAllStop() { - Na_RhythmAllStop(); } extern void sAdo_FurnitureInst(u32 id, u8 inst, u8* melody, const xyz_t* pos) { - u16 scalc; f32 fcalc; @@ -205,22 +182,18 @@ extern void sAdo_FurnitureInst(u32 id, u8 inst, u8* melody, const xyz_t* pos) { } extern void sAdo_Pause(u8 mode) { - Na_Pause(mode); } extern f32 sAdo_GetRhythmAnimCounter(u32 p) { - return Na_GetRhythmAnimCounter(p); } extern s8 sAdo_GetRhythmDelay(u32 p) { - return Na_GetRhythmDelay(p); } extern void sAdo_GetRhythmInfo(TempoBeat_c* rhythm) { - Na_GetRhythmInfo(rhythm); } @@ -229,12 +202,10 @@ extern void sAdo_SetRhythmInfo(TempoBeat_c* rhythm) { } extern s8 sAdo_InstCountGet() { - return Na_InstCountGet(); } extern void sAdo_RhythmPos(u32 p, u8 haniwa_id, const xyz_t* pos) { - u16 scalc; f32 fcalc; @@ -243,57 +214,47 @@ extern void sAdo_RhythmPos(u32 p, u8 haniwa_id, const xyz_t* pos) { } extern void sAdo_SpecChange(int spec) { - Na_SpecChange(spec); } -extern void sAdo_MDPlayerPos(const xyz_t* pos, u16 s1, u16 s2, int p) { - +extern void sAdo_MDPlayerPos(const xyz_t* pos, u16 s1, u16 s2, u32 p) { u16 scalc; f32 fcalc; sAdo_Calc_MicPosition_common(&fcalc, &scalc, pos); - Na_MDPlayerPos(scalc, s1, s2, p, fcalc); + Na_MDPlayerPos(scalc, fcalc, s1, s2, p); } extern void sAdo_BGMVolume(f32 volume, u16 vol_move_ctr) { - Na_BGMVolume(volume, vol_move_ctr); } extern void sAdo_BgmCrossfadeStart(u8 b) { - Na_BgmCrossfadeStart(b); } extern void sAdo_SubGameStart() { - Na_SubGameStart(); } extern void sAdo_SubGameEnd() { - Na_SubGameEnd(); } extern int sAdo_SubGameOK() { - return Na_SubGameOK(); } extern void sAdo_Tenki(u8 mode) { - Na_Tenki(mode); } extern void sAdos_KishaStatusTrg(u8 state) { - Na_KishaStatusTrg(state); } extern void sAdos_KishaStatusLevel(f32 speed, u32 ongenNum1, u16 angle1, f32 distance1, u32 ongenNum2, u16 angle2, f32 distance2) { - Na_KishaStatusLevel(speed, ongenNum1, angle1, distance1, ongenNum2, angle2, distance2); } @@ -302,7 +263,6 @@ extern int sAdos_GetRadioCounter(Radio_c* radio) { } extern void sAdos_GetKappaCounter(void* p) { - Na_GetKappaCounter(p); } @@ -311,12 +271,10 @@ extern void sAdos_GetStaffRollInfo(StaffRollInfo_c* info) { } extern void sAdos_TTKK_ARM(u8 mode) { - Na_TTKK_ARM(mode); } extern void sAdo_OngenTrgStartSpeed(f32 speed, u16 s1, const xyz_t* pos) { - f32 fcalc; u16 scalc; @@ -326,42 +284,34 @@ extern void sAdo_OngenTrgStartSpeed(f32 speed, u16 s1, const xyz_t* pos) { } extern void sAdo_TrgSeEcho(u8 b) { - Na_TrgSeEcho(b); } extern void sAdo_LevSeEcho(u8 b) { - Na_LevSeEcho(b); } extern u8 sAdo_BgmFadeoutCheck() { - Na_BgmFadeoutCheck(); } extern u8 sAdo_SeFadeoutCheck() { - Na_SeFadeoutCheck(); } extern void sAdo_RoomType(u8 type) { - Na_RoomType(type); } extern void sAdo_Museum(u8 type) { - Na_Museum(type); } extern void sAdo_SoftReset() { - Na_SoftReset(); } u16 sAdo_Get_WalkLabel(int attr) { - u16 ret; switch (attr) { case mCoBG_ATTRIBUTE_GRASS0: @@ -401,7 +351,6 @@ u16 sAdo_Get_WalkLabel(int attr) { } u16 sAdo_Get_KokeruLabel(int type) { - u16 label = sAdo_Get_WalkLabel(type); u16 ret; @@ -438,12 +387,10 @@ u16 sAdo_Get_KokeruLabel(int type) { } extern void sAdo_SceneMode(u8 mode) { - Na_SceneMode(mode); } -extern u8 sAdo_RoomIncectPos(u32 f, u16 u, const xyz_t* pos) { - +extern u8 sAdo_RoomIncectPos(u32 f, u8 u, const xyz_t* pos) { u16 scalc; f32 fcalc; @@ -452,7 +399,6 @@ extern u8 sAdo_RoomIncectPos(u32 f, u16 u, const xyz_t* pos) { } extern void sAdo_FurnitureInstPos(u32 id, const xyz_t* pos) { - u16 scalc; f32 fcalc; @@ -461,22 +407,18 @@ extern void sAdo_FurnitureInstPos(u32 id, const xyz_t* pos) { } extern void sAdo_Set_ongenpos_refuse_fg(int state) { - S_ongenpos_refuse_fg = state; } extern int sAdo_GameframeEnd_Check() { - return S_ongenpos_refuse_fg; } extern u32 sAdo_GetSoundFrameCounter() { - return Na_GetSoundFrameCounter(); } extern int sAdo_CheckOnPlussBridge(const xyz_t* pos, u32 atr) { - f32 x; f32 z; if ((Common_Get(pluss_bridge_pos) != NULL) && (atr == 0x17)) { @@ -490,16 +432,13 @@ extern int sAdo_CheckOnPlussBridge(const xyz_t* pos, u32 atr) { } extern void sAdo_RegistPlussBridge(const xyz_t* pos) { - Common_Set(pluss_bridge_pos, pos); } extern void sAdo_DeletePlussBridge() { - Common_Set(pluss_bridge_pos, NULL); } extern void sAdo_kazagurumaLevel(f32 level) { - Na_kazagurumaLevel(level); } diff --git a/src/game/m_player_sound.c_inc b/src/game/m_player_sound.c_inc index e63f840e..5d60b37f 100644 --- a/src/game/m_player_sound.c_inc +++ b/src/game/m_player_sound.c_inc @@ -7,13 +7,13 @@ typedef enum player_status_level_s { static void Player_actor_sound_SetStatus(ACTOR* actor) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actor; - int status; + int main_index = player->now_main_index; + u8 status; f32 speed; - status = player->now_main_index; speed = player->keyframe0.frame_control.speed / 0.59999996f; - switch (status) { + switch (main_index) { case mPlayer_INDEX_READY_WALK_NET: case mPlayer_INDEX_DEMO_WALK: case mPlayer_INDEX_WALK: @@ -34,7 +34,7 @@ static void Player_actor_sound_SetStatus(ACTOR* actor) { } else if (speed < 0.0f) { speed = 0.0f; } - sAdo_PlayerStatusLevel(speed, status); + sAdo_PlayerStatusLevel(status, speed); } static void Player_actor_set_sound_common1(xyz_t* pos, u16 id) { diff --git a/src/static/jaudio_NES/game/OSAttention.c_inc b/src/static/jaudio_NES/game/OSAttention.c_inc new file mode 100644 index 00000000..df777c9b --- /dev/null +++ b/src/static/jaudio_NES/game/OSAttention.c_inc @@ -0,0 +1,11 @@ +#include "jaudio_NES/OSAttention.h" + +#include "MSL_C/printf.h" + +extern "C" int OSAttention(const char* msg, ...) { + va_list marker; + + va_start(marker, msg); + + return vprintf(msg, marker); +} diff --git a/src/static/jaudio_NES/game/game64.c b/src/static/jaudio_NES/game/game64.c index cf2a5ffe..4d28d981 100644 --- a/src/static/jaudio_NES/game/game64.c +++ b/src/static/jaudio_NES/game/game64.c @@ -1,244 +1,2 @@ -#include "jaudio_NES/game64.h" - -#include "m_name_table.h" - -// TODO: finish - -#pragma force_active on - -// clang-format off -static const u8 SEQ_TABLE[256] = { - 247, 81, 82, 83, - 84, 85, 86, 87, - 88, 89, 90, 91, - 92, 93, 94, 95, - 96, 97, 98, 99, - 100, 101, 102, 103, - 104, 176, 178, 218, - 219, 220, 222, 223, - 224, 225, 226, 227, - 229, 169, 170, 171, - 68, 166, 60, 59, - 168, 177, 74, 62, - 63, 64, 65, 66, - 67, 214, 215, 216, - 217, 228, 57, 231, - 221, 230, 167, 70, - 71, 73, 75, 78, - 79, 105, 58, 69, - 72, 232, 233, 234, - 235, 179, 76, 172, - 173, 174, 175, 247, - 247, 247, 247, 247, - 180, 181, 182, 183, - 184, 185, 186, 187, - 188, 189, 190, 191, - 192, 193, 194, 195, - 196, 197, 198, 199, - 200, 201, 202, 203, - 204, 205, 206, 207, - 208, 209, 210, 211, - 212, 213, 77, 61, - 77, 80, 247, 247, - 111, 112, 113, 114, - 115, 116, 117, 118, - 119, 120, 121, 122, - 123, 124, 125, 126, - 127, 128, 129, 130, - 131, 132, 133, 134, - 135, 136, 137, 138, - 139, 140, 141, 142, - 143, 144, 145, 146, - 147, 148, 149, 150, - 151, 152, 153, 154, - 155, 156, 157, 158, - 159, 160, 161, 162, - 163, 164, 165, 247, - 247, 247, 247, 247, - 247, 247, 247, 247, - 0, 1, 2, 3, - 4, 5, 6, 7, - 8, 9, 10, 11, - 12, 13, 14, 15, - 16, 17, 18, 19, - 20, 21, 22, 23, - 24, 25, 26, 27, - 28, 29, 30, 31, - 32, 33, 34, 35, - 36, 37, 38, 39, - 40, 41, 42, 43, - 44, 45, 46, 47, - 48, 49, 50, 51, - 52, 53, 54, 55, - 56, 57, 236, 237, - 241, 238, 240, 239 -}; - -static const u16 SE_FLOOR_DATA[FLOOR_ALL_NUM] ATTRIBUTE_ALIGN(2) = { - 27, 27, 32, 31, - 28, 32, 31, 27, - 27, 28, 29, 29, - 27, 31, 28, 30, - 33, 27, 30, 27, - 32, 32, 31, 28, - 32, 27, 35, 32, - 32, 32, 27, 29, - 31, 32, 28, 28, - 28, 27, 28, 28, - 27, 31, 36, 32, - 28, 27, 33, 27, - 35, 28, 32, 32, - 28, 28, 32, 29, - 28, 33, 27, 32, - 33, 27, 32, 32, - 28, 32, 32, 34, - 32, 32, 27, 32, - 28, 27, 29, 27, - 28, 28, 27, 31, - 28, 31, 28, 32, - 28, 32, 32, 32, - 32, 32, 32, 32, - 32, 32, 32 -}; - -// ATTRIBUTE_ALIGN(4) -static const u16 SE_ROOM_INS_DATA[] ATTRIBUTE_ALIGN(2) = { - 0x505, 0x509, 0x50D, 0x511, - 0x515, 0x519, 0x51D, 0x521, - 0x525, 0x529, 0x501, 0x52D, - 0x531, 0x535, 0x539, 0x53D, - 0 -}; - -static const u16 SE_ROOM_INS_RANDOM_OFFSET[] = { - 11, 11, 11, 10, - 10, 10, 12, 100, - 20, 100, 45, 10, - 4, 9, 2, 1, - 0 -}; - -static const u8 SHIIN2BOIN[] = { - 0, 1, 2, 3, - 4, 5, 1, 2, - 3, 4, 5, 1, - 2, 3, 4, 5, - 1, 2, 3, 4, - 5, 1, 2, 3, - 4, 5, 1, 2, - 3, 4, 5, 1, - 2, 3, 4, 5, - 1, 3, 5, 1, - 2, 3, 4, 5, - 1, 45, 1, 2, - 3, 4, 5, 1, - 2, 3, 4, 5, - 1, 4, 5, 1, - 2, 3, 4, 5, - 1, 2, 3, 4, - 5, 1, 2, 3, - 4, 5, 3, 1, - 3, 5, 0, 0, - 0, 0, 0, 0, - 0, 0 -}; - -static const u8 TRGPRIO[] = { - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 50, 50, 50, - 50, 60, 60, 60, - 60, 60, 60, 60, - 60, 70, 70, 70, - 70, 70, 70, 70, - 70, 70, 70, 70, - 70, 70, 70, 70, - 70, 70, 70, 70, - 70, 70, 70, 70 -}; - -static const u8 sou_trg_se_init[] ATTRIBUTE_ALIGN(4) = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 63, 128, 0, 0, - 63, 128, 0, 0, - 63, 128, 0, 0, - 63, 128, 0, 0, - 63, 0, 0, 0, - 0, 0, 0, 0 -}; - -static const u8 sou_voice_se_init[] ATTRIBUTE_ALIGN(4) = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 63, 128, 0, 0, - 63, 128, 0, 0, - 63, 128, 0, 0, - 63, 128, 0, 0, - 63, 128, 0, 0, - 63, 128, 0, 0, - 63, 0, 0, 0 -}; - -static const u8 sou_lev_se_init[] ATTRIBUTE_ALIGN(4) = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 63, 128, 0, 0, - 63, 0, 0, 0 -}; - -static const u8 sou_lev_ongen_data_init[] ATTRIBUTE_ALIGN(4) = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 70, 28, 60, 0, - 70, 28, 60, 0 -}; - -static const u8 sou_ongen_entry_init[] ATTRIBUTE_ALIGN(4) = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 63, 0, 0, 0, - 70, 28, 60, 0 -}; - -static const u8 sou_se_fade_init[] ATTRIBUTE_ALIGN(4) = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 63, 128, 0, 0 -}; - -// force data pooling -FORCESTRIP static int __REMOVE_TEMP() { - int a = SEQ_TABLE[55]; - int b = SE_FLOOR_DATA[3]; - int c = SE_ROOM_INS_DATA[6]; - - return a * b * c; -} - -// clang-format on - -#pragma force_active reset +#include "../src/static/jaudio_NES/game/OSAttention.c_inc" +#include "../src/static/jaudio_NES/game/game64.c_inc" diff --git a/src/static/jaudio_NES/game/game64.c_inc b/src/static/jaudio_NES/game/game64.c_inc new file mode 100644 index 00000000..478cac3b --- /dev/null +++ b/src/static/jaudio_NES/game/game64.c_inc @@ -0,0 +1,3931 @@ +#include "jaudio_NES/game64_cpp.h" +#include "m_name_table.h" + +#include "jaudio_NES/audiowork.h" +#include "jaudio_NES/sub_sys.h" +#include "jaudio_NES/staff.h" +#include "jaudio_NES/kappa.h" +#include "jaudio_NES/rhythm.h" +#include "jaudio_NES/melody.h" + +// this needs to not include aram_hp +#include "jaudio_NES/dummyrom.h" + +#include "jaudio_NES/dvdthread.h" +#include "jaudio_NES/verysimple.h" +#include "jaudio_NES/neosthread.h" + +typedef struct SOU_LEV_ONGEN_DATA { + u8 _00; + u8 _01; + u8 _02; + u8 _03; + u32 _04; + u8 _08; + u8 _09; + f32 _0C; + f32 _10; +} SOU_LEV_ONGEN_DATA; + +typedef struct SOU_LS_STACK { + u8 _0; + u8 _1; + u8 _2; + u8 _3; + u8 _4; + u8 _5; + u8 _6; + u8 _7; +} SOU_LS_STACK; + +typedef struct SOU_LEV_SE { + u8 _00; + u8 _01; + u8 _02; + u8 _03; + u8 _04; + u8 _05; + u8 _06; + u8 _07; + f32 _08; + f32 _0C; + u8 _10; + u8 _11; + u8 _12; + u8 _13; +} SOU_LEV_SE; + +typedef struct SOU_ONGEN_ENTRY { + u32 _00; + u8 _04; + u16 _06; + u8 _08; + u8 _09; + u8 _0A; + f32 _0C; +} SOU_ONGEN_ENTRY; + +typedef struct SOU_TRG_SE { + u16 _00; + u32 _04; + f32 _08; + f32 _0C; + f32 _10; + f32 _14; + u8 _18; + u8 _19; + u8 _1A; + u8 _1B; + u8 _1C; + u8 _1D; +} SOU_TRG_SE; + +typedef struct SOU_SE_FADE { + u16 _0; + u16 _2; + u16 _4; + u16 _6; + f32 _8; +} SOU_SE_FADE; + +typedef struct SOU_VOICE_SE { + u8 _00; + u32 _04; + f32 _08; + f32 _0C; + f32 _10; + f32 _14; + f32 _18; + f32 _1C; + u8 _20; + u8 _21; +} SOU_VOICE_SE; + +typedef struct SOU_ROOM_INS { + u32 _00; + u8 _04; + u8 _05; + u8 _06; + u8 _07; +} SOU_ROOM_INS; + +typedef struct SOU_SYS_LEV { + u8 _0; + u8 _1; + u8 _2; +} SOU_SYS_LEV; + +// clang-format off +const u8 SEQ_TABLE[256] = { + 247, 81, 82, 83, + 84, 85, 86, 87, + 88, 89, 90, 91, + 92, 93, 94, 95, + 96, 97, 98, 99, + 100, 101, 102, 103, + 104, 176, 178, 218, + 219, 220, 222, 223, + 224, 225, 226, 227, + 229, 169, 170, 171, + 68, 166, 60, 59, + 168, 177, 74, 62, + 63, 64, 65, 66, + 67, 214, 215, 216, + 217, 228, 57, 231, + 221, 230, 167, 70, + 71, 73, 75, 78, + 79, 105, 58, 69, + 72, 232, 233, 234, + 235, 179, 76, 172, + 173, 174, 175, 247, + 247, 247, 247, 247, + 180, 181, 182, 183, + 184, 185, 186, 187, + 188, 189, 190, 191, + 192, 193, 194, 195, + 196, 197, 198, 199, + 200, 201, 202, 203, + 204, 205, 206, 207, + 208, 209, 210, 211, + 212, 213, 77, 61, + 77, 80, 247, 247, + 111, 112, 113, 114, + 115, 116, 117, 118, + 119, 120, 121, 122, + 123, 124, 125, 126, + 127, 128, 129, 130, + 131, 132, 133, 134, + 135, 136, 137, 138, + 139, 140, 141, 142, + 143, 144, 145, 146, + 147, 148, 149, 150, + 151, 152, 153, 154, + 155, 156, 157, 158, + 159, 160, 161, 162, + 163, 164, 165, 247, + 247, 247, 247, 247, + 247, 247, 247, 247, + 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15, + 16, 17, 18, 19, + 20, 21, 22, 23, + 24, 25, 26, 27, + 28, 29, 30, 31, + 32, 33, 34, 35, + 36, 37, 38, 39, + 40, 41, 42, 43, + 44, 45, 46, 47, + 48, 49, 50, 51, + 52, 53, 54, 55, + 56, 57, 236, 237, + 241, 238, 240, 239 +}; + +const u16 SE_FLOOR_DATA[FLOOR_ALL_NUM] = { + 27, 27, 32, 31, + 28, 32, 31, 27, + 27, 28, 29, 29, + 27, 31, 28, 30, + 33, 27, 30, 27, + 32, 32, 31, 28, + 32, 27, 35, 32, + 32, 32, 27, 29, + 31, 32, 28, 28, + 28, 27, 28, 28, + 27, 31, 36, 32, + 28, 27, 33, 27, + 35, 28, 32, 32, + 28, 28, 32, 29, + 28, 33, 27, 32, + 33, 27, 32, 32, + 28, 32, 32, 34, + 32, 32, 27, 32, + 28, 27, 29, 27, + 28, 28, 27, 31, + 28, 31, 28, 32, + 28, 32, 32, 32, + 32, 32, 32, 32, + 32, 32, 32 +}; + +// ATTRIBUTE_ALIGN(4) +const u16 SE_ROOM_INS_DATA[0x11] = { + 0x505, 0x509, 0x50D, 0x511, + 0x515, 0x519, 0x51D, 0x521, + 0x525, 0x529, 0x501, 0x52D, + 0x531, 0x535, 0x539, 0x53D, + 0 +}; + +const u16 SE_ROOM_INS_RANDOM_OFFSET[] = { + 11, 11, 11, 10, + 10, 10, 12, 100, + 20, 100, 45, 10, + 4, 9, 2, 1, + 0 +}; + +const u8 SHIIN2BOIN[] = { + 0, 1, 2, 3, + 4, 5, 1, 2, + 3, 4, 5, 1, + 2, 3, 4, 5, + 1, 2, 3, 4, + 5, 1, 2, 3, + 4, 5, 1, 2, + 3, 4, 5, 1, + 2, 3, 4, 5, + 1, 3, 5, 1, + 2, 3, 4, 5, + 1, 45, 1, 2, + 3, 4, 5, 1, + 2, 3, 4, 5, + 1, 4, 5, 1, + 2, 3, 4, 5, + 1, 2, 3, 4, + 5, 1, 2, 3, + 4, 5, 3, 1, + 3, 5, 0, 0, + 0, 0, 0, 0, + 0, 0 +}; + +const u8 TRGPRIO[] = { + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 50, 50, 50, + 50, 60, 60, 60, + 60, 60, 60, 60, + 60, 70, 70, 70, + 70, 70, 70, 70, + 70, 70, 70, 70, + 70, 70, 70, 70, + 70, 70, 70, 70, + 70, 70, 70, 70 +}; + +const SOU_TRG_SE sou_trg_se_init = { + 0, + 0, + 1.f, + 1.f, + 1.f, + 1.f, + 0x3f, + 0, + 0, + 0, + 0, + 0, +}; + +const SOU_VOICE_SE sou_voice_se_init = { + 0, + 0, + 1.f, + 1.f, + 1.f, + 1.f, + 1.f, + 1.f, + 0x3f, + 0, +}; + +const SOU_LEV_SE sou_lev_se_init = { + 0,0,0,0, + 0,0,0,0, + 0.f, + 1.f, + 0x3f, + 0,0,0 +}; + +const SOU_LEV_ONGEN_DATA sou_lev_ongen_data_init = { + 0,0,0,0, + 0, + 0,0, + 9999.f, + 9999.f +}; + +const SOU_ONGEN_ENTRY sou_ongen_entry_init = { + 0, + 0, + 0, + 0x3f, + 0, + 0, + 9999.f +}; + +const SOU_SE_FADE sou_se_fade_init = { + 0, + 0, + 0, + 0, + 1.f +}; + +SOU_LS_STACK sou_ls_stack[6]; +SOU_TRG_SE sou_trg_se[6]; +SOU_VOICE_SE sou_voice_se[2]; +SOU_LEV_SE sou_lev_se[6]; +SOU_LEV_ONGEN_DATA sou_lev_ongen_data[4]; +SOU_ONGEN_ENTRY sou_ongen_entry[50]; +SOU_ROOM_INS sou_room_ins[50]; +SOU_SE_FADE sou_se_fade[16]; + +const SOU_LS_STACK sou_ls_stack_init = { + 0,0,0,0, + 0,0,0,0 +}; + +const SOU_SYS_LEV sou_sys_lev_init = { + 0,0,0 +}; + +const SOU_ROOM_INS sou_room_ins_init = { + 0, + 0,0,0,0 +}; + +// unused +f32 OCTAVETABLE[] = { + 1.0, + 1.059463, + 1.122462, + 1.189207, + 1.259921, + 1.33484, + 1.414214, + 1.498307, + 1.587401, + 1.681793, + 1.781797, + 1.887749, +}; + +u16 BGM_MUTE_TABLE_FINE[] = { + 0x01e0, 0x0d80, 0x3800, 0x0500, 0x00e0, 0x01c0, 0x05e0, 0x3dc0, + 0x0d80, 0x0d80, 0x1800, 0x1d00, 0x1d80, 0x1d80, 0x01f0, 0x00f8, + 0x0d80, 0x7c00, 0xf200, 0x1d00, 0x1d00, 0x05e0, 0x0d80, 0x0dfc +}; + +u16 BGM_MUTE_TABLE_SNOW[] = { + 0x0302, 0x0c23, 0x216e, 0x040c, 0x0006, 0x0006, 0x0406, 0x381b, + 0x0803, 0x0c64, 0x1020, 0x1083, 0x1c02, 0x104f, 0x070e, 0x06c0, + 0x081d, 0x001b, 0x2023, 0x1017, 0x1803, 0x0006, 0x0c16, 0x0d82 +}; + + +u16 BGM_MUTE_TABLE_SAKURA[] = { + 0x00e2, 0x00a7, 0x116e, 0x001c, 0x0006, 0x0106, 0x018e, 0x01db, + 0x0107, 0x00ff, 0x0024, 0x0087, 0x0007, 0x0c4f, 0x00be, 0x0418, + 0x045f, 0x001b, 0xca07, 0x0517, 0x0107, 0x0106, 0x019f, 0x007b +}; + +u16 BGM_MUTE_TABLE_MUSEUM[] = { + 0x0000, 0xffe8, 0x9ff6, 0xff1a, + 0xfdff, 0x62fc +}; +#include "../src/static/jaudio_NES/game/game64_dummy.c_inc" +// clang-format on + +// sou_ls_stack; +s32 sou_now_spec; +u8 sou_scene_mode; +u8 sou_chime_status; +void (*fatalErrorCallback)(); +u8 sou_last_kokoro_counter; +u8 sou_game_frame_counter; +u8 sou_kokoro_toguru; +u16 sou_last_sys_trg_num; +u8 sou_sub_game_flag; +f32 sou_kazaguruma_speed; +u8 sou_NeosBootCheck_ok; +u8 sou_walk_flag; +u8 sou_last_walk_l; +u8 sou_last_walk_r; +u8 sou_player_dash; +f32 sou_player_speed; +u8 sou_voice_se_toguru; +u8 sou_message_speed; +u8 sou_message_status; +u8 sou_last_voice; +u8 sou_voice_effect; +u8 sou_voice_effect_counter; +u8 sou_pause_flag; +u8 sou_metranome_counter; +u16 sou_last_perio; +u16 sou_last_uchiwa; +u8 sou_out_mode; +u8 sou_voice_mode; +u16 sou_kiteki_random; +u16 sou_kiteki_counter; +f32 sou_camera2ground; +u8 sou_now_boin; +u8 sou_now_voice_seq; +u8 sou_nobasu_count; +u8 sou_now_bgm_num; +f32 sou_bgm_vol_move_target; +f32 sou_bgm_vol_move_delta; +f32 sou_bgm1_vol_now; +f32 sou_bgm2_vol_now; +u16 sou_bgm_vol_move_time; +u16 sou_bgm_vol_move_counter; +u16 sou_kisha_angle; +f32 sou_kisha_distance; +u16 sou_kisha_angle2; +f32 sou_kisha_distance2; +u16 sou_kisha_status; +u16 sou_shu_count; +u16 sou_tonton_count; +u8 sou_voice_type; +u8 sou_SE_SENTAKU_KETTEI_timer; +u8 sou_SE_ami_hit_water_timer; +u8 sou_tenki; +u8 sou_now_bgm_fadeout; +u8 sou_se_handle_ready; +u8 sou_voice_handle_ready; +u8 sou_bgm_call_buffer; +u8 sou_bgm_call_buffer_u8; +u16 sou_bgm_call_buffer_u16; +u16 sou_ongenpos_kill_countdown; +f32 sou_chime_volume; +u8 sou_filter_status; +u8 sou_room_type; +u8 sou_museum_type; +u8 sou_internal_filter_status; +u8 sou_se_fadeout_flag; +u8 sou_voice_sad_toguru; +u8 sou_last_voice_toguru; +u8 sou_voice_se_skip; +u8 sou_num2_request; +u8 sou_Na_VoiceSeFlag; +s16 sou_num2_animal_id; +u8 sou_num2_scale; +u8 sou_last_num; +u8 sou_last_num2; +u8 sou_num_org; +u8 sou_num2_org; +u8 sou_num3_org; +SOU_SYS_LEV sou_sys_lev[2]; + +u8 sou_now_bgm_handle = 1; +f32 SOU_ONGEN_AREA1 = 540.f; +f32 SOU_ONGEN_AREA2 = 533.f; +f32 sou_md_bgm_boost_pasent = 1.f; + +u8 audiomemory[0x90000] ATTRIBUTE_ALIGN(32); +int* SOU_FIR_STATE; +int SOU_FIR_STATE_COPY[6]; + +void Sou_lev_ongen_data_struct_clear() { + u8 i = 0; + for (i = 0; i < ARRAY_COUNT(sou_lev_ongen_data); i++) { + sou_lev_ongen_data[i]._00 = 0; + sou_lev_ongen_data[i]._01 = 0; + sou_lev_ongen_data[i]._02 = 0; + sou_lev_ongen_data[i]._03 = 0; + sou_lev_ongen_data[i]._04 = 0; + sou_lev_ongen_data[i]._08 = 0; + sou_lev_ongen_data[i]._09 = 0; + sou_lev_ongen_data[i]._0C = 9999.f; + sou_lev_ongen_data[i]._10 = 9999.f; + } + for (i = 0; i < ARRAY_COUNT(sou_ls_stack); i++) { + sou_ls_stack[i]._0 = 0; + sou_ls_stack[i]._1 = 0; + sou_ls_stack[i]._2 = 0; + sou_ls_stack[i]._3 = 0; + sou_ls_stack[i]._4 = 0; + sou_ls_stack[i]._5 = 0; + sou_ls_stack[i]._6 = 0; + sou_ls_stack[i]._7 = 0; + } + for (i = 0; i < ARRAY_COUNT(sou_lev_se); i++) { + sou_lev_se[i]._00 = 0; + sou_lev_se[i]._01 = 0; + sou_lev_se[i]._02 = 0; + sou_lev_se[i]._03 = 0; + sou_lev_se[i]._04 = 0; + sou_lev_se[i]._05 = 0; + sou_lev_se[i]._06 = 0; + sou_lev_se[i]._07 = 0; + sou_lev_se[i]._08 = 0.f; + sou_lev_se[i]._0C = 1.f; + sou_lev_se[i]._10 = 0x3f; + sou_lev_se[i]._11 = 0; + sou_lev_se[i]._12 = 0; + sou_lev_se[i]._13 = 0; + } + for (i = 0; i < ARRAY_COUNT(sou_ongen_entry); i++) { + sou_ongen_entry[i]._00 = 0; + sou_ongen_entry[i]._04 = 0; + sou_ongen_entry[i]._06 = 0; + sou_ongen_entry[i]._08 = 63; + sou_ongen_entry[i]._09 = 0; + sou_ongen_entry[i]._0A = 0; + sou_ongen_entry[i]._0C = 9999.0f; + } +} + +void Sou_BgmFadeoutEndCheck() { + if (sou_now_bgm_fadeout && !AG.groups[1].flags.enabled && !AG.groups[3].flags.enabled) { + sou_now_bgm_num = 0; + sou_now_bgm_fadeout = FALSE; + } +} + +u8 Sou_BgmTenkiConv(u8 v) { + Na_BgmMuteClear(); + if (v >= 1 && v <= 24) { + switch (sou_tenki) { + case 0: { + Nap_SetU16(NA_MAKE_COMMAND(0x90, sou_now_bgm_handle, 0, 0), BGM_MUTE_TABLE_FINE[v - 1]); + Nap_SetS8(NA_MAKE_COMMAND(8, sou_now_bgm_handle, 0xff, 0), 1); + } break; + case 1: { + v = 0x45; + } break; + case 2: { + Nap_SetU16(NA_MAKE_COMMAND(0x90, sou_now_bgm_handle, 0, 0), BGM_MUTE_TABLE_SNOW[v - 1]); + Nap_SetS8(NA_MAKE_COMMAND(8, sou_now_bgm_handle, 0xff, 0), 1); + } break; + case 3: { + Nap_SetU16(NA_MAKE_COMMAND(0x90, sou_now_bgm_handle, 0, 0), BGM_MUTE_TABLE_SAKURA[v - 1]); + Nap_SetS8(NA_MAKE_COMMAND(8, sou_now_bgm_handle, 0xff, 0), 1); + } break; + case 4: + default: + break; + } + } + return v; +} + +void Sou_GroupControl(u8 a, u8 b, f32 c) { + u8 i = 0; + if (c > 1.f) { + c = 1.f; + } + Nap_SetF32(NA_MAKE_COMMAND(0x41, a, 0, 0), c); + if (a == 1) { + sou_bgm1_vol_now = c; + } + if (a == 3) { + sou_bgm2_vol_now = c; + } + for (i = 0; i < 16; i++) { + Nap_SetS8(NA_MAKE_COMMAND(0x3, a, i, 0), b); + } +} + +void Sou_GroupControl_MD(u8 a, u8 b, f32 c) { + u8 i = 0; + if (c > 2.25f) { + c = 2.25f; + } + Nap_SetF32(NA_MAKE_COMMAND(0x41, a, 0, 0), c); + if (a == 1) { + sou_bgm1_vol_now = c; + } + if (a == 3) { + sou_bgm2_vol_now = c; + } + for (i = 0; i < 16; i++) { + Nap_SetS8(NA_MAKE_COMMAND(0x3, a, i, 0), b); + } +} + +u8 pan_kochou(u8 a, f32 b) { + s16 v = 0; + switch (sou_out_mode) { + case 0: { + b = b * 1.6f; + } break; + case 2: { + b = b * 0.75f; + }; break; + case 1: { + return a; + }; + } + v = (s16)((a - 0x40) * b); + if (v > 0x3f) { + v = 0x3f; + } + if (v < -0x40) { + v = -0x40; + } + return 0x40 + v; +} + +u8 angle2pan(u16 angle, f32 dist) { + u8 a = 0; + f32 v = 1.f; + angle >>= 8; + if (angle >= 0x40 && angle <= 0xc0) { + a = 0x80 - (angle - 0x40); + if (a == 0x80) { + a = 0x7f; + } + } else if (angle >= 0xc1) { + a = angle - 0xc0; + } else { + a = angle + 0x40; + } + a = pan_kochou(a, v); + return a; +} + +f32 distance2vol(f32 distance) { + f32 ret = 0.f; + if (distance > SOU_ONGEN_AREA1) { + return 0.f; + } + + ret = 1.15f - (1.15f / SQ(SOU_ONGEN_AREA1)) * SQ(distance); + if (ret > 1.5f) { + if (ret > 1.5f) { + ret = 1.5f; + } + ret = 1.5f; + } + return ret; +} + +f32 distance2vol4KITEKI(f32 v) { + f32 v2 = 0.f; + if (v > 320.f) { + v2 = 1.15f; + } + if (v < 0.f) { + v2 = 0.f; + } + // idk about this constant + v2 = 1.15f - (1.f / (5287.f - 0.0435f)) * (v - 320.f); + return v2; +} + +f32 distance2vol4MD(f32 v) { + f32 v2 = 0.f; + if (v > SOU_ONGEN_AREA2) { + v2 = 0.f; + } else { + v2 = 1.15f - (1.15f / SQ(SOU_ONGEN_AREA2)) * SQ(v); + } + if (v2 > 0.8f) { + v2 = 0.8f; + } + if (v2 < 0.2f) { + v2 = 0.2f; + } + return v2; +} + +void Sou_VoiceStart(u8 a, u8 b) { + Nap_SetS8(NA_MAKE_COMMAND(6, 4, a, 0), b); +} + +void Sou_TrgStart(u16 r29, f32 f29, f32 f30, f32 f31, u8 r17, u8 r28, f32 stack_8) { + u8 r31 = 0; + u8 r22 = 0; + u8 r30 = 0; + u32 r27 = 0; + u8 r26 = 0; + u8 r23 = 0; + u8 r24 = 0; + u16 r25 = 0; + u8 r21 = 0; + u8 r20 = 0; + u8 r19 = 0; + u8 r18 = 0; + switch (r29) { + case 0x61: + case 0x63: + case 0x65: + case 0x67: + case 0x11e: + case 0x4028: { + r27 = Nap_GetRandom(); + r29 = r29 + (r27 & 1); + } break; + case 0x3b: + case 0x13f: + case 0x43f: + case 0x501: + case 0x505: + case 0x509: + case 0x50d: + case 0x511: + case 0x515: + case 0x519: + case 0x51d: + case 0x521: + case 0x525: + case 0x529: + case 0x531: + case 0x539: + case 0x53d: { + r27 = Nap_GetRandom(); + r29 = r29 + (r27 & 3); + } break; + } + r26 = r29; + r25 = r29 & 0xf000; + r24 = r25 >> 12; + r25 = r29 & 0xf00; + r23 = r25 >> 8; + r21 = r24 & 1; + r19 = r24 & 2; + r18 = r24 & 4; + r20 = r24 & 8; + + if (r21) { + Nap_SetF32(NA_MAKE_COMMAND(4, 0, 0xe, 0), f31); + Nap_SetS8(NA_MAKE_COMMAND(3, 0, 0xe, 0), r17); + Nap_SetS8(NA_MAKE_COMMAND(5, 0, 0xe, 0), r28); + Nap_SetS8(NA_MAKE_COMMAND(6, 0, 0xe, 0), r26); + Nap_SetS8(NA_MAKE_COMMAND(6, 0, 0xe, 1), r23); + return; + } + + if (r20) { + for (r30 = 0; r30 < 6; r30++) { + if (r29 == sou_trg_se[r30]._00) { + return; + } + } + } + + for (r30 = 0; r30 < 6; r30++) { + if (!sou_trg_se[r30]._00) { + r31 = r30; + r30 = 6; + r22 = 1; + } + } + + if (r22 == 1) { + sou_trg_se[r31]._00 = r29; + sou_trg_se[r31]._1C = TRGPRIO[r26]; + sou_trg_se[r31]._04 = 1; + sou_trg_se[r31]._08 = f29; + sou_trg_se[r31]._0C = f30; + sou_trg_se[r31]._14 = f31; + sou_trg_se[r31]._18 = r17; + if (r28) { + sou_trg_se[r31]._19 = r28; + } else { + if (r19) { + r25 = (u16)(stack_8); + r28 = r25 >> 3; + if (r28 > 0x32) { + r28 = 0x32; + } + } + if (r18 && sou_trg_se[r31]._1B) { + r28 = 0x28; + } else { + r28 = 0; + } + sou_trg_se[r31]._19 = r28; + } + Nap_SetS8(NA_MAKE_COMMAND(6, 0, r31, 0), r26); + Nap_SetS8(NA_MAKE_COMMAND(6, 0, r31, 1), r23); + return; + } + r27 = 0; + for (r30 = 0; r30 < 6; r30++) { + if (sou_trg_se[r30]._04 > r27) { + r27 = sou_trg_se[r30]._04; + r31 = r30; + } + } + if (TRGPRIO[r26] >= sou_trg_se[r31]._1C) { + sou_trg_se[r31]._00 = r29; + sou_trg_se[r31]._1C = TRGPRIO[r26]; + sou_trg_se[r31]._04 = 1; + sou_trg_se[r31]._08 = f29; + sou_trg_se[r31]._0C = f30; + sou_trg_se[r31]._14 = f31; + sou_trg_se[r31]._18 = r17; + Nap_SetS8(NA_MAKE_COMMAND(6, 0, r31, 0), r26); + Nap_SetS8(NA_MAKE_COMMAND(6, 0, r31, 1), r23); + } +} + +void Sou_SpecialRoutine00() { + u16 r = 0; + if (sou_kiteki_counter) { + if (sou_kiteki_counter == 1) { + r = Nap_GetRandom(); + r >>= 8; + sou_kiteki_random = r + 0x40; + } + if (sou_kiteki_counter == sou_kiteki_random) { + Na_SysTrgStart(0x4028); + r = Nap_GetRandom(); + r >>= 7; + sou_kiteki_random = r + 0x80; + sou_kiteki_counter = 2; + } + sou_kiteki_counter++; + } +} + +void Sou_SpecialRoutine02() { + if (sou_SE_SENTAKU_KETTEI_timer) { + sou_SE_SENTAKU_KETTEI_timer++; + } + if (sou_SE_SENTAKU_KETTEI_timer == 0x1e) { + sou_SE_SENTAKU_KETTEI_timer = 0; + } +} + +void Sou_SpecialRoutine03() { + if (sou_SE_ami_hit_water_timer) { + sou_SE_ami_hit_water_timer++; + } + if (sou_SE_ami_hit_water_timer == 10) { + sou_SE_ami_hit_water_timer = 0; + } +} + +void Sou_TrgEndCheck() { + u8 i = 0; + // unused + u8 j = 0; + for (i = 0; i < 6; i++) { + if (sou_trg_se[i]._00) { + sou_trg_se[i]._04++; + if (!Nap_ReadSubPort(0, i, 5) && sou_trg_se[i]._1D) { + sou_trg_se[i]._00 = 0; + sou_trg_se[i]._04 = 0; + } + } + sou_trg_se[i]._1D = Nap_ReadSubPort(0, i, 5); + } +} + +void Sou_LevStart(u8 a, u8 b) { + if (b == sou_lev_se[a]._00 || b == sou_lev_se[a]._01 || b == sou_lev_se[a]._02 || b == sou_lev_se[a]._03 || + b == sou_lev_se[a]._04 || b == sou_lev_se[a]._05 || b == sou_lev_se[a]._06 || b == sou_lev_se[a]._07) { + return; + } + + if (sou_ls_stack[a]._0) { + if (sou_ls_stack[a]._1) { + if (sou_ls_stack[a]._2) { + if (sou_ls_stack[a]._3) { + } else { + sou_ls_stack[a]._3 = b; + } + } else { + sou_ls_stack[a]._2 = b; + } + } else { + sou_ls_stack[a]._1 = b; + } + } else { + sou_ls_stack[a]._0 = b; + } +} + +void Sou_LevStop(u8 a, u8 b) { + u8 v = 0; + if (b == sou_ls_stack[a]._0) { + sou_ls_stack[a]._0 = 0; + if (sou_ls_stack[a]._1) { + sou_ls_stack[a]._0 = sou_ls_stack[a]._1; + sou_ls_stack[a]._1 = sou_ls_stack[a]._2; + sou_ls_stack[a]._2 = sou_ls_stack[a]._3; + sou_ls_stack[a]._3 = 0; + } + } + + if (b == sou_ls_stack[a]._1) { + sou_ls_stack[a]._1 = 0; + if (sou_ls_stack[a]._2) { + sou_ls_stack[a]._1 = sou_ls_stack[a]._2; + sou_ls_stack[a]._2 = sou_ls_stack[a]._3; + sou_ls_stack[a]._3 = 0; + } + } + + if (b == sou_ls_stack[a]._2) { + sou_ls_stack[a]._2 = 0; + if (sou_ls_stack[a]._3) { + sou_ls_stack[a]._2 = sou_ls_stack[a]._3; + sou_ls_stack[a]._3 = 0; + } + } + + if (b == sou_ls_stack[a]._3) { + sou_ls_stack[a]._3 = 0; + } + + if (b == sou_lev_se[a]._00) { + sou_lev_se[a]._00 = sou_lev_se[a]._01; + sou_lev_se[a]._01 = sou_lev_se[a]._02; + sou_lev_se[a]._02 = sou_lev_se[a]._03; + sou_lev_se[a]._03 = sou_lev_se[a]._04; + sou_lev_se[a]._04 = sou_lev_se[a]._05; + sou_lev_se[a]._05 = sou_lev_se[a]._06; + sou_lev_se[a]._06 = sou_lev_se[a]._07; + sou_lev_se[a]._07 = 0; + Nap_SetS8(NA_MAKE_COMMAND(6, 0, a + 8, 5), -1); + if (sou_lev_se[a]._00) { + v = sou_lev_se[a]._00; + sou_lev_se[a]._00 = 0; + Sou_LevStart(a, v); + } + return; + } + + if (b == sou_lev_se[a]._01) { + sou_lev_se[a]._01 = sou_lev_se[a]._02; + sou_lev_se[a]._02 = sou_lev_se[a]._03; + sou_lev_se[a]._03 = sou_lev_se[a]._04; + sou_lev_se[a]._04 = sou_lev_se[a]._05; + sou_lev_se[a]._05 = sou_lev_se[a]._06; + sou_lev_se[a]._06 = sou_lev_se[a]._07; + sou_lev_se[a]._07 = 0; + return; + } + + if (b == sou_lev_se[a]._02) { + sou_lev_se[a]._02 = sou_lev_se[a]._03; + sou_lev_se[a]._03 = sou_lev_se[a]._04; + sou_lev_se[a]._04 = sou_lev_se[a]._05; + sou_lev_se[a]._05 = sou_lev_se[a]._06; + sou_lev_se[a]._06 = sou_lev_se[a]._07; + sou_lev_se[a]._07 = 0; + return; + } + + if (b == sou_lev_se[a]._03) { + sou_lev_se[a]._03 = sou_lev_se[a]._04; + sou_lev_se[a]._04 = sou_lev_se[a]._05; + sou_lev_se[a]._05 = sou_lev_se[a]._06; + sou_lev_se[a]._06 = sou_lev_se[a]._07; + sou_lev_se[a]._07 = 0; + return; + } + + if (b == sou_lev_se[a]._04) { + sou_lev_se[a]._04 = sou_lev_se[a]._05; + sou_lev_se[a]._05 = sou_lev_se[a]._06; + sou_lev_se[a]._06 = sou_lev_se[a]._07; + sou_lev_se[a]._07 = 0; + return; + } + + if (b == sou_lev_se[a]._05) { + sou_lev_se[a]._05 = sou_lev_se[a]._06; + sou_lev_se[a]._06 = sou_lev_se[a]._07; + sou_lev_se[a]._07 = 0; + return; + } + + if (b == sou_lev_se[a]._06) { + sou_lev_se[a]._06 = sou_lev_se[a]._07; + sou_lev_se[a]._07 = 0; + return; + } + + if (b == sou_lev_se[a]._07) { + sou_lev_se[a]._07 = 0; + return; + } +} + +void Sou_TrgMake(u8 a) { + f32 v = 0.f; + sou_trg_se[a]._10 = sou_trg_se[a]._08 * sou_trg_se[a]._0C; + v = sou_trg_se[a]._10; + if (sou_se_fadeout_flag) { + v *= sou_se_fade[a]._8; + } + Nap_SetF32(NA_MAKE_COMMAND(1, 0, a, 0), v); + Nap_SetF32(NA_MAKE_COMMAND(4, 0, a, 0), sou_trg_se[a]._14); + Nap_SetS8(NA_MAKE_COMMAND(3, 0, a, 0), sou_trg_se[a]._18); + Nap_SetS8(NA_MAKE_COMMAND(5, 0, a, 0), sou_trg_se[a]._19); +} + +void Sou_VoiceMake(u8 a) { + sou_voice_se[a]._10 = sou_voice_se[a]._08 * sou_voice_se[a]._0C; + sou_voice_se[a]._1C = sou_voice_se[a]._14 * sou_voice_se[a]._18; + Nap_SetF32(NA_MAKE_COMMAND(1, 4, a, 0), sou_voice_se[a]._10); + Nap_SetF32(NA_MAKE_COMMAND(4, 4, a, 0), sou_voice_se[a]._1C); + Nap_SetS8(NA_MAKE_COMMAND(3, 4, a, 0), sou_voice_se[a]._20); + Nap_SetS8(NA_MAKE_COMMAND(5, 4, a, 0), sou_voice_se[a]._21); +} + +void Sou_LevMake(u8 a) { + u8 unused = 0; + f32 v = 0.f; + if (sou_pause_flag == 1) { + Nap_SetF32(NA_MAKE_COMMAND(1, 0, a + 8, 0), 0.5f * sou_lev_se[a]._08); + return; + } + v = sou_lev_se[a]._08; + if (sou_se_fadeout_flag) { + v *= sou_se_fade[a + 8]._8; + } + if (sou_lev_se[a]._00 == 77) { + v *= sou_kazaguruma_speed; + } + Nap_SetF32(NA_MAKE_COMMAND(1, 0, a + 8, 0), v); + Nap_SetS8(NA_MAKE_COMMAND(3, 0, a + 8, 0), sou_lev_se[a]._10); + if (sou_lev_se[a]._13 && sou_lev_se[a]._12) { + if (sou_scene_mode == 0xf) { + sou_lev_se[a]._11 = 0; + } else { + sou_lev_se[a]._11 = 0x28; + } + } else { + sou_lev_se[a]._11 = 0; + } + Nap_SetS8(NA_MAKE_COMMAND(5, 0, a + 8, 0), sou_lev_se[a]._11); +} + +void Sou_ChimeMake() { + if (sou_se_fade[7]._0 || sou_se_fade[7]._4) { + sou_chime_volume *= sou_se_fade[7]._8; + } + Nap_SetF32(NA_MAKE_COMMAND(1, 0, 7, 0), sou_chime_volume); +} + +void Sou_LevSet(u8 a) { + u8 v1 = 0, v2 = 0; + if (!sou_ls_stack[a]._0) { + return; + } + v1 = sou_ls_stack[a]._0; + if (!sou_lev_se[a]._00) { + sou_lev_se[a]._00 = v1; + } else if (!sou_lev_se[a]._01) { + sou_lev_se[a]._01 = sou_lev_se[a]._00; + sou_lev_se[a]._00 = v1; + } else if (!sou_lev_se[a]._02) { + sou_lev_se[a]._02 = sou_lev_se[a]._01; + sou_lev_se[a]._01 = sou_lev_se[a]._00; + sou_lev_se[a]._00 = v1; + } else if (!sou_lev_se[a]._03) { + sou_lev_se[a]._03 = sou_lev_se[a]._02; + sou_lev_se[a]._02 = sou_lev_se[a]._01; + sou_lev_se[a]._01 = sou_lev_se[a]._00; + sou_lev_se[a]._00 = v1; + } else if (!sou_lev_se[a]._04) { + sou_lev_se[a]._04 = sou_lev_se[a]._03; + sou_lev_se[a]._03 = sou_lev_se[a]._02; + sou_lev_se[a]._02 = sou_lev_se[a]._01; + sou_lev_se[a]._01 = sou_lev_se[a]._00; + sou_lev_se[a]._00 = v1; + } else if (!sou_lev_se[a]._05) { + sou_lev_se[a]._05 = sou_lev_se[a]._04; + sou_lev_se[a]._04 = sou_lev_se[a]._03; + sou_lev_se[a]._03 = sou_lev_se[a]._02; + sou_lev_se[a]._02 = sou_lev_se[a]._01; + sou_lev_se[a]._01 = sou_lev_se[a]._00; + sou_lev_se[a]._00 = v1; + } else if (!sou_lev_se[a]._06) { + sou_lev_se[a]._06 = sou_lev_se[a]._05; + sou_lev_se[a]._05 = sou_lev_se[a]._04; + sou_lev_se[a]._04 = sou_lev_se[a]._03; + sou_lev_se[a]._03 = sou_lev_se[a]._02; + sou_lev_se[a]._02 = sou_lev_se[a]._01; + sou_lev_se[a]._01 = sou_lev_se[a]._00; + sou_lev_se[a]._00 = v1; + } else if (!sou_lev_se[a]._07) { + sou_lev_se[a]._07 = sou_lev_se[a]._06; + sou_lev_se[a]._06 = sou_lev_se[a]._05; + sou_lev_se[a]._05 = sou_lev_se[a]._04; + sou_lev_se[a]._04 = sou_lev_se[a]._03; + sou_lev_se[a]._03 = sou_lev_se[a]._02; + sou_lev_se[a]._02 = sou_lev_se[a]._01; + sou_lev_se[a]._01 = sou_lev_se[a]._00; + sou_lev_se[a]._00 = v1; + } + v2 = v1 & 0x80; + sou_lev_se[a]._12 = v2; + v1 &= 0x7f; + Nap_SetS8(NA_MAKE_COMMAND(6, 0, a + 8, 0), v1); + sou_ls_stack[a]._0 = sou_ls_stack[a]._1; + sou_ls_stack[a]._1 = sou_ls_stack[a]._2; + sou_ls_stack[a]._2 = sou_ls_stack[a]._3; + sou_ls_stack[a]._3 = 0; +} + +void Sou_Insect_Lev_Cont() { + u8 i = 0; + for (i = 0; i < 50; i++) { + if (sou_room_ins[i]._04 == sou_room_ins[i]._05) { + sou_room_ins[i]._00 = 0; + sou_room_ins[i]._04 = 0; + sou_room_ins[i]._05 = 0; + sou_room_ins[i]._06 = 0; + sou_room_ins[i]._07 = 0; + } else { + sou_room_ins[i]._05 = sou_room_ins[i]._04; + } + } +} + +void Sou_Ongen_Lev_Cont() { + u8 i = 0; + u8 j = 0; + u8 k = 0; + u8 found = FALSE; + u8 foundIndex = 0; + u8 old04 = 0; + u8 old09 = 0; + + for (i = 0; i < ARRAY_COUNT(sou_ongen_entry); i++) { + if (sou_ongen_entry[i]._00) { + for (j = 0; j < ARRAY_COUNT(sou_lev_ongen_data); j++) { + if (sou_ongen_entry[i]._00 == sou_lev_ongen_data[j]._04) { + found = TRUE; + } + } + + if (!found) { + for (j = 0; j < ARRAY_COUNT(sou_lev_ongen_data); j++) { + if (!sou_lev_ongen_data[j]._04) { + sou_lev_ongen_data[j]._09 = sou_ongen_entry[i]._04; + sou_lev_ongen_data[j]._04 = sou_ongen_entry[i]._00; + sou_lev_ongen_data[j]._08 = sou_ongen_entry[i]._06; + sou_lev_ongen_data[j]._0C = sou_ongen_entry[i]._0C; + sou_lev_se[j]._10 = sou_ongen_entry[i]._08; + + sou_lev_ongen_data[j]._00 = 1; + sou_lev_ongen_data[j]._01 = 0; + sou_lev_ongen_data[j]._10 = 9999.f; + sou_lev_ongen_data[j]._03 = 0; + sou_lev_ongen_data[j]._02 = 0; + + // exit early + j = ARRAY_COUNT(sou_lev_ongen_data); + } + } + } + } + } + + for (i = 0; i < ARRAY_COUNT(sou_ongen_entry); i++) { + if (sou_ongen_entry[i]._00) { + if (sou_ongen_entry[i]._09 == sou_ongen_entry[i]._0A) { + for (j = 0; j < ARRAY_COUNT(sou_lev_ongen_data); j++) { + if (sou_lev_ongen_data[j]._04 == sou_ongen_entry[i]._00) { + + // extern void Sou_LevStop(u8, u8); + + // matches the asm here, but messes up the rest of the file + // Sou_LevStop((u8)j, sou_lev_ongen_data[j]._08); + + // matches the rest of the file before this point + Sou_LevStop((int)j, sou_lev_ongen_data[j]._08); + + old09 = sou_lev_ongen_data[j]._09; + sou_lev_ongen_data[j]._09 = 0; + sou_lev_ongen_data[j]._00 = 0; + sou_lev_ongen_data[j]._01 = 0; + sou_lev_ongen_data[j]._02 = 0; + sou_lev_ongen_data[j]._03 = 0; + sou_lev_ongen_data[j]._04 = 0; + sou_lev_ongen_data[j]._08 = 0; + sou_lev_ongen_data[j]._0C = 9999.f; + sou_lev_ongen_data[j]._10 = 9999.f; + for (k = 0; k < ARRAY_COUNT(sou_lev_ongen_data); k++) { + if (sou_lev_ongen_data[k]._09 > old09) { + sou_lev_ongen_data[k]._09--; + } + } + + // exit early + j = ARRAY_COUNT(sou_lev_ongen_data); + } + } + old04 = sou_ongen_entry[i]._04; + sou_ongen_entry[i]._04 = 0; + sou_ongen_entry[i]._00 = 0; + sou_ongen_entry[i]._06 = 0; + sou_ongen_entry[i]._08 = 0; + sou_ongen_entry[i]._09 = 0; + sou_ongen_entry[i]._0A = 0; + sou_ongen_entry[i]._0C = 9999.f; + + for (j = 0; j < ARRAY_COUNT(sou_ongen_entry); j++) { + if (sou_ongen_entry[j]._04 > old04) { + sou_ongen_entry[j]._04--; + } + } + return; + } + + if (sou_ongen_entry[i]._04 < 5 && sou_ongen_entry[i]._04) { + for (j = 0; j < ARRAY_COUNT(sou_lev_ongen_data); j++) { + if (sou_lev_ongen_data[j]._04 == sou_ongen_entry[i]._00) { + foundIndex = j; + + // exit early + j = ARRAY_COUNT(sou_lev_ongen_data); + } + } + sou_lev_ongen_data[foundIndex]._0C = sou_ongen_entry[i]._0C; + sou_lev_se[foundIndex]._10 = sou_ongen_entry[i]._08; + sou_lev_ongen_data[foundIndex]._00++; + } + + sou_ongen_entry[i]._0A = sou_ongen_entry[i]._09; + } + } +} + +void Sou_Ongen_Lev_Prog(u8 param_1) { + u8 unused = 0; + u8 i = 0; + u8 t = 0; + if (sou_pause_flag != 1) { + if (sou_lev_ongen_data[param_1]._04 == 0) { + sou_lev_ongen_data[param_1]._02 = 0xff; + } + if (sou_lev_ongen_data[param_1]._00 == sou_lev_ongen_data[param_1]._01) { + if (sou_lev_ongen_data[param_1]._02 == 2) { + sou_lev_ongen_data[param_1]._02 = 3; + } + } else { + if (sou_lev_ongen_data[param_1]._02 == 0) { + sou_lev_ongen_data[param_1]._02 = 1; + } + if (sou_lev_ongen_data[param_1]._02 >= 3 && (sou_lev_ongen_data[param_1]._02 <= 6)) { + sou_lev_ongen_data[param_1]._02 = 2; + } + } + + sou_lev_ongen_data[param_1]._01 = sou_lev_ongen_data[param_1]._00; + if ((sou_lev_ongen_data[param_1]._10 <= SOU_ONGEN_AREA1) && + (sou_lev_ongen_data[param_1]._0C > SOU_ONGEN_AREA1)) { + sou_lev_ongen_data[param_1]._03 = 0; + } + + if (sou_lev_ongen_data[param_1]._10 > SOU_ONGEN_AREA1) { + if (sou_lev_ongen_data[param_1]._0C <= SOU_ONGEN_AREA1) { + sou_lev_ongen_data[param_1]._03 = 1; + } + } + + sou_lev_ongen_data[param_1]._10 = sou_lev_ongen_data[param_1]._0C; + if ((sou_lev_ongen_data[param_1]._02 >= 3) && (sou_lev_ongen_data[param_1]._02 <= 6)) { + sou_lev_ongen_data[param_1]._02++; + } + + if ((sou_lev_ongen_data[param_1]._02 == 1) && (sou_lev_ongen_data[param_1]._03 == 1)) { + Sou_LevStart((int)param_1, sou_lev_ongen_data[param_1]._08); + sou_lev_ongen_data[param_1]._02 = 2; + } + + if (sou_lev_ongen_data[param_1]._02 == 7 || sou_lev_ongen_data[param_1]._02 == 0xff) { + Sou_LevStop((int)param_1, sou_lev_ongen_data[param_1]._08); + t = sou_lev_ongen_data[param_1]._09; + sou_lev_ongen_data[param_1]._09 = 0; + sou_lev_ongen_data[param_1]._00 = 0; + sou_lev_ongen_data[param_1]._01 = 0; + sou_lev_ongen_data[param_1]._02 = 0; + sou_lev_ongen_data[param_1]._03 = 0; + sou_lev_ongen_data[param_1]._04 = 0; + sou_lev_ongen_data[param_1]._08 = 0; + sou_lev_ongen_data[param_1]._0C = 9999.f; + sou_lev_ongen_data[param_1]._10 = 9999.f; + for (i = 0; i < 4; i++) { + if (sou_lev_ongen_data[i]._09 > t) { + sou_lev_ongen_data[i]._09--; + } + } + } + + if (sou_lev_ongen_data[param_1]._02 != 0) { + switch (sou_lev_ongen_data[param_1]._08) { + default: + sou_lev_se[param_1]._08 = distance2vol(sou_lev_ongen_data[param_1]._0C); + break; + case 78: + sou_lev_se[param_1]._08 = distance2vol4MD(sou_lev_ongen_data[param_1]._0C); + break; + } + } + } + return; +} + +void Sou_BgmStart(u8 a, u16 b) { + sou_now_bgm_num = a; + if (a == 0) { + Nap_SetS32(NA_MAKE_COMMAND(0x83, 1, 0, 0), 0); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 3, 0, 0), 0); + return; + } + u16 oldBGMHandle = sou_now_bgm_handle; + sou_now_bgm_handle = (sou_now_bgm_handle == 1) ? 3 : 1; + if (a >= 0x70 && a <= 0x79) { + Nap_SetS8(NA_MAKE_COMMAND(0x46, oldBGMHandle, 0, 0), sou_now_bgm_handle); + Nap_SetS8(NA_MAKE_COMMAND(0x46, oldBGMHandle, 0, 1), SEQ_TABLE[a]); + Na_BgmMuteClear(); + } else if (a >= 0x53 && a <= 0x57) { + int bb = (u8)(a - 0x53); + Na_SysTrgStart(bb + 0x16f); + } else { + Nap_SetS32(NA_MAKE_COMMAND(0x83, oldBGMHandle, 0, 0), b); + Nap_SetS32(NA_MAKE_COMMAND(0x83, sou_now_bgm_handle, 0, 0), 0); + a = Sou_BgmTenkiConv(a); + Nap_SetS32(NA_MAKE_COMMAND(0x82, sou_now_bgm_handle, SEQ_TABLE[a], 0), b); + Na_StaffRollStart(SEQ_TABLE[a]); + Na_SetKappaSeqHandle(sou_now_bgm_handle); + } +} + +void Sou_BGMVolMove() { + f32 v = 0.f; + f32 unused = 0.f; + if (sou_bgm_vol_move_time) { + switch (sou_now_bgm_handle) { + case 1: { + if (sou_bgm_vol_move_counter == 0) { + sou_bgm_vol_move_time = 0; + v = sou_bgm_vol_move_target; + } else { + if (sou_bgm_vol_move_counter == sou_bgm_vol_move_time && sou_bgm_vol_move_time) { + if (sou_bgm_vol_move_target - sou_bgm1_vol_now == 0) { + sou_bgm_vol_move_delta = 0.f; + sou_bgm_vol_move_counter = 1; + } else { + sou_bgm_vol_move_delta = + (sou_bgm_vol_move_target - sou_bgm1_vol_now) / (int)sou_bgm_vol_move_time; + } + } + v = sou_bgm_vol_move_target + (-(sou_bgm_vol_move_delta * (int)sou_bgm_vol_move_counter)); + sou_bgm_vol_move_counter--; + if (v > 1.f) { + v = 1.f; + } + } + if (v > 1.f) { + v = 1.f; + } + if (v < 0.f) { + v = 0.f; + } + sou_bgm1_vol_now = v; + Nap_SetF32(NA_MAKE_COMMAND(0x41, 1, 0, 0), v); + } break; + case 3: { + if (sou_bgm_vol_move_counter == 0) { + sou_bgm_vol_move_time = 0; + v = sou_bgm_vol_move_target; + } else { + if (sou_bgm_vol_move_counter == sou_bgm_vol_move_time && sou_bgm_vol_move_time) { + if (sou_bgm_vol_move_target - sou_bgm2_vol_now == 0) { + sou_bgm_vol_move_delta = 0.f; + sou_bgm_vol_move_counter = 1; + } else { + sou_bgm_vol_move_delta = + (sou_bgm_vol_move_target - sou_bgm2_vol_now) / (int)sou_bgm_vol_move_time; + } + } + v = sou_bgm_vol_move_target + (-(sou_bgm_vol_move_delta * (int)sou_bgm_vol_move_counter)); + sou_bgm_vol_move_counter--; + if (v > 1.f) { + v = 1.f; + } + } + if (v > 1.f) { + v = 1.f; + } + if (v < 0.f) { + v = 0.f; + } + sou_bgm2_vol_now = v; + Nap_SetF32(NA_MAKE_COMMAND(0x41, 3, 0, 0), v); + } break; + } + } +} + +void Sou_Na_BgmStart(u8 a) { + u16 v = 0; + Sou_BgmStart(a, v); + if (a >= 0x80 && a <= 0xb6) { + Sou_GroupControl(1, 0x3f, 0.f); + Sou_GroupControl(3, 0x3f, 0.f); + } +} + +void Sou_Na_BgmStop(u16 a) { + sou_now_bgm_fadeout = 1; + a &= 0xfff; + if (sou_now_bgm_handle == 1) { + Nap_SetS32(NA_MAKE_COMMAND(0x83, 1, 0, 0), a); + } else { + Nap_SetS32(NA_MAKE_COMMAND(0x83, 3, 0, 0), a); + } +} + +void Sou_SpecialRoutine06() { + u8 v = 0; + switch (sou_bgm_call_buffer) { + case 1: { + Sou_Na_BgmStart(sou_bgm_call_buffer_u8); + } break; + case 2: { + if (sou_now_bgm_handle == 1) { + sou_now_bgm_handle = 3; + Nap_SetS32(NA_MAKE_COMMAND(0x83, 1, 0, 0), 700); + v = Sou_BgmTenkiConv(sou_bgm_call_buffer_u8); + Nap_SetS32(NA_MAKE_COMMAND(0x82, 3, SEQ_TABLE[v], 0), 700); + } else { + sou_now_bgm_handle = 1; + Nap_SetS32(NA_MAKE_COMMAND(0x83, 3, 0, 0), 700); + v = Sou_BgmTenkiConv(sou_bgm_call_buffer_u8); + Nap_SetS32(NA_MAKE_COMMAND(0x82, 1, SEQ_TABLE[v], 0), 700); + } + } break; + case 3: { + Sou_Na_BgmStop(sou_bgm_call_buffer_u16); + } + } +} + +void Sou_SpecialRoutine07() { + sou_bgm_call_buffer = 0; + sou_bgm_call_buffer_u8 = 0; + sou_bgm_call_buffer_u16 = 0; +} + +void Sou_SeFadeoutRoutine() { + u8 i = 0; + f32 v1 = 0.f; + f32 v2 = 0.f; + for (i = 0; i < ARRAY_COUNT(sou_se_fade); i++) { + if (sou_se_fade[i]._0 == 0xffff) { + sou_se_fade[i]._8 = 0.f; + sou_se_fade[i]._0 = 0; + if (i >= 8 && i <= 14) { + sou_lev_se[i]._08 = 0.f; + } + } else if (sou_se_fade[i]._0 != 0) { + if (sou_se_fade[i]._0 == sou_se_fade[i]._2) { + sou_se_fade[i]._8 = 0.f; + sou_se_fade[i]._0 = 0xffff; + } else { + v1 = sou_se_fade[i]._2 - sou_se_fade[i]._0; + v2 = sou_se_fade[i]._2; + sou_se_fade[i]._8 = v1 / v2; + sou_se_fade[i]._0++; + } + } + } +} + +void Sou_SeFadeinRoutine() { + u8 i = 0; + f32 v1 = 0.f; + f32 v2 = 0.f; + for (i = 0; i < ARRAY_COUNT(sou_se_fade); i++) { + if (sou_se_fade[i]._4 == 0xffff) { + sou_se_fade[i]._8 = 1.f; + sou_se_fade[i]._4 = 0; + if (i >= 8 && i <= 14) { + sou_lev_se[i]._08 = 1.f; + } + } else if (sou_se_fade[i]._4 != 0) { + if (sou_se_fade[i]._4 == sou_se_fade[i]._6) { + sou_se_fade[i]._8 = 1.f; + sou_se_fade[i]._4 = 0xffff; + } else { + v1 = sou_se_fade[i]._6 - sou_se_fade[i]._4; + v2 = sou_se_fade[i]._6; + sou_se_fade[i]._8 = v1 / v2; + sou_se_fade[i]._4++; + } + } + } +} + +void Sou_SeVolumeReset() { + u8 i = 0; + for (i = 0; i < ARRAY_COUNT(sou_lev_se); i++) { + sou_se_fade[i + 8]._0 = 0; + sou_se_fade[i + 8]._4 = 0; + sou_lev_se[i]._08 = 0.f; + sou_lev_se[i]._0C = 1.f; + } +} + +void Sou_SeTrFadeout(u8 a, u16 b) { + sou_se_fade[a]._0 = 1; + sou_se_fade[a]._2 = b; +} + +void Sou_SeFadeout(u16 a) { + u8 i = 0; + sou_se_fadeout_flag = 1; + for (i = 0; i < ARRAY_COUNT(sou_lev_se); i++) { + Sou_SeTrFadeout(i + 8, a); + } +} + +void Sou_SpecialRoutine08() { + if (sou_ongenpos_kill_countdown != 0 && sou_ongenpos_kill_countdown != 1) { + sou_ongenpos_kill_countdown--; + } +} + +void Sou_SpecialRoutine10() { + if (sou_Na_VoiceSeFlag == 1) { + sou_Na_VoiceSeFlag = 0; + } else if (sou_num2_request) { + Na_VoiceSe(sou_num2_request, 0, 0, sou_num2_animal_id, sou_num2_scale, 2); + sou_num2_request = 0; + } +} + +void Sou_InitAudio() { + int i; + sou_now_spec = 0; + sou_scene_mode = 0; + sou_now_bgm_handle = 1; + sou_chime_status = 0; + sou_last_kokoro_counter = 0; + sou_game_frame_counter = 0; + sou_kokoro_toguru = 0; + sou_last_sys_trg_num = 0; + sou_sub_game_flag = 0; + sou_kazaguruma_speed = 0.f; + sou_walk_flag = 0; + sou_last_walk_l = 0; + sou_last_walk_r = 0; + sou_player_dash = 0; + sou_player_speed = 0.f; + sou_voice_se_toguru = 0; + sou_message_speed = 0; + sou_message_status = 0; + sou_last_voice = 0; + sou_voice_effect = 0; + sou_voice_effect_counter = 0; + sou_pause_flag = 0; + sou_metranome_counter = 0; + sou_last_perio = 0; + sou_last_uchiwa = 0; + sou_out_mode = 0; + sou_voice_mode = 0; + sou_kiteki_random = 0; + sou_kiteki_counter = 0; + sou_camera2ground = 0.f; + sou_now_boin = 0; + sou_now_voice_seq = 0; + sou_nobasu_count = 0; + sou_now_bgm_num = 0; + sou_bgm_vol_move_target = 0.f; + sou_bgm_vol_move_delta = 0.f; + sou_bgm1_vol_now = 0.f; + sou_bgm2_vol_now = 0.f; + sou_bgm_vol_move_time = 0; + sou_bgm_vol_move_counter = 0; + sou_kisha_angle = 0; + sou_kisha_distance = 0.f; + sou_kisha_angle2 = 0; + sou_kisha_distance2 = 0.f; + sou_kisha_status = 0; + sou_shu_count = 0; + sou_tonton_count = 0; + sou_voice_type = 0; + sou_SE_SENTAKU_KETTEI_timer = 0; + sou_SE_ami_hit_water_timer = 0; + sou_tenki = 0; + sou_now_bgm_fadeout = 0; + sou_se_handle_ready = 0; + sou_voice_handle_ready = 0; + sou_bgm_call_buffer = 0; + sou_bgm_call_buffer_u8 = 0; + sou_bgm_call_buffer_u16 = 0; + sou_ongenpos_kill_countdown = 0; + sou_chime_volume = 0.f; + sou_filter_status = 0; + sou_room_type = 0; + sou_museum_type = 0; + SOU_ONGEN_AREA1 = 540.f; + SOU_ONGEN_AREA2 = 533.f; + sou_md_bgm_boost_pasent = 1.f; + sou_internal_filter_status = 0; + sou_se_fadeout_flag = 0; + sou_voice_sad_toguru = 0; + sou_last_voice_toguru = 0; + sou_voice_se_skip = 0; + sou_num2_request = 0; + sou_Na_VoiceSeFlag = 0; + sou_num2_animal_id = 0; + sou_num2_scale = 0; + sou_last_num = 0; + sou_last_num2 = 0; + sou_num_org = 0; + sou_num2_org = 0; + sou_num3_org = 0; + for (i = 0; i < ARRAY_COUNT(sou_trg_se); i++) { + sou_trg_se[i] = sou_trg_se_init; + } + for (i = 0; i < ARRAY_COUNT(sou_voice_se); i++) { + sou_voice_se[i] = sou_voice_se_init; + } + for (i = 0; i < ARRAY_COUNT(sou_lev_se); i++) { + sou_lev_se[i] = sou_lev_se_init; + sou_ls_stack[i] = sou_ls_stack_init; + } + for (i = 0; i < ARRAY_COUNT(sou_lev_ongen_data); i++) { + sou_lev_ongen_data[i] = sou_lev_ongen_data_init; + } + for (i = 0; i < ARRAY_COUNT(sou_ongen_entry); i++) { + sou_ongen_entry[i] = sou_ongen_entry_init; + } + for (i = 0; i < ARRAY_COUNT(sou_sys_lev); i++) { + sou_sys_lev[i] = sou_sys_lev_init; + } + for (i = 0; i < ARRAY_COUNT(sou_room_ins); i++) { + sou_room_ins[i] = sou_room_ins_init; + } + for (i = 0; i < ARRAY_COUNT(sou_se_fade); i++) { + sou_se_fade[i] = sou_se_fade_init; + } + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + Nap_SetF32(NA_MAKE_COMMAND(0x41, 0, 0, 0), 1.15f); + Nap_SetF32(NA_MAKE_COMMAND(0x41, 1, 0, 0), 1.f); + sou_bgm1_vol_now = 1.f; + Nap_SetF32(NA_MAKE_COMMAND(0x41, 3, 0, 0), 1.f); + sou_bgm2_vol_now = 1.f; + Nap_SetF32(NA_MAKE_COMMAND(0x41, 2, 0, 0), 1.f); + Na_Pause(0); + Na_BGMVolume(1.f, 2); + Na_RhythmInit(); + Na_MelodyInit(); + Na_StaffRollInit(); +} + +void Sou_DVD_Error(char*, u8*) { + fatalErrorCallback(); +} + +void Na_InitAudio(void (*fatal_callback)(), u8* load_addr, size_t load_size, u8* bootsound, size_t bootsound_size, + u8 cut_flag) { + u32 v = 0x810000; + fatalErrorCallback = fatal_callback; + u32 unused = SetPreCopy_NeosRom(load_addr, load_size, cut_flag); + Jac_RegisterDVDErrorCallback(Sou_DVD_Error); + Jac_Start(audiomemory, sizeof(audiomemory), v); + BootSound((u32)bootsound, bootsound_size); + sou_NeosBootCheck_ok = 1; +} + +void Na_GameFrame() { + u8 i = 0; + sou_game_frame_counter++; + switch (sou_NeosBootCheck_ok) { + case 1: { + if (!Neos_CheckBoot()) { + return; + } + sou_NeosBootCheck_ok = 2; + } + // fallthrough + case 2: { + Sou_InitAudio(); + sou_NeosBootCheck_ok = 3; + } break; + case 3: { + Sou_BGMVolMove(); + Sou_SeFadeoutRoutine(); + Sou_SeFadeinRoutine(); + Sou_TrgEndCheck(); + for (i = 0; i < ARRAY_COUNT(sou_trg_se); i++) { + Sou_TrgMake(i); + } + for (i = 0; i < ARRAY_COUNT(sou_voice_se); i++) { + Sou_VoiceMake(i); + } + for (i = 0; i < ARRAY_COUNT(sou_lev_se); i++) { + Sou_LevSet(i); + Sou_LevMake(i); + } + Sou_ChimeMake(); + Sou_Ongen_Lev_Cont(); + Sou_Insect_Lev_Cont(); + for (i = 0; i < ARRAY_COUNT(sou_lev_ongen_data); i++) { + Sou_Ongen_Lev_Prog(i); + } + Sou_BgmFadeoutEndCheck(); + Sou_SpecialRoutine00(); + Sou_SpecialRoutine02(); + Sou_SpecialRoutine03(); + Sou_SpecialRoutine06(); + Sou_SpecialRoutine07(); + Sou_SpecialRoutine08(); + Sou_SpecialRoutine10(); + int unused = Nap_SendStart(); + } break; + case 0: + case 4: + default: + break; + } +} + +void Na_Reset() { + int unused = Nap_StartReset(); +} + +void Na_SoftReset() { + u8 i = 0; + sou_pause_flag = 0; + sou_scene_mode = 0; + for (i = 0; i < ARRAY_COUNT(sou_sys_lev); i++) { + sou_sys_lev[i]._0 = 0; + sou_sys_lev[i]._1 = 0; + } + for (i = 0; i < ARRAY_COUNT(sou_ls_stack); i++) { + sou_ls_stack[i]._0 = 0; + sou_ls_stack[i]._1 = 0; + sou_ls_stack[i]._2 = 0; + sou_ls_stack[i]._3 = 0; + sou_ls_stack[i]._4 = 0; + sou_ls_stack[i]._5 = 0; + sou_ls_stack[i]._6 = 0; + sou_ls_stack[i]._7 = 0; + } + for (i = 0; i < ARRAY_COUNT(sou_lev_se); i++) { + sou_lev_se[i]._00 = 0; + sou_lev_se[i]._01 = 0; + sou_lev_se[i]._02 = 0; + sou_lev_se[i]._03 = 0; + sou_lev_se[i]._04 = 0; + sou_lev_se[i]._05 = 0; + sou_lev_se[i]._06 = 0; + sou_lev_se[i]._07 = 0; + } + Na_Pause(0); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 0, 0, 0), 180); + Na_BgmStop(180); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 2, 0, 0), 180); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 4, 0, 0), 180); + Na_BGMVolume(1.f, 2); + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + int unused = Nap_SendStart(); +} + +void Na_Tenki(u8 a) { + if (a != sou_tenki) { + sou_tenki = a; + } +} + +void Na_BgmStart(u8 a) { + u16 unused = 0; + + sou_bgm_call_buffer_u8 = a; + sou_bgm_call_buffer = 1; +} + +void Na_BgmCrossfadeStart(u8 a) { + sou_bgm_call_buffer_u8 = a; + sou_bgm_call_buffer = 2; +} + +void Na_BgmStop(u16 a) { + sou_bgm_call_buffer_u16 = a; + sou_bgm_call_buffer = 3; +} + +void Na_SysTrgStart(u16 a) { + u8 v = FALSE; + u8 j = 0x3f; + u8 k = 0; + u8 unused = 0; + f32 f31 = 1.f; + f32 f30 = 1.f; + f32 f29 = 1.f; + f32 f28 = 0.f; + if (a == 0x54 && sou_last_sys_trg_num == 0x54) { + if (sou_kokoro_toguru == 0) { + sou_kokoro_toguru = 1; + if (sou_game_frame_counter - sou_last_kokoro_counter == 1) { + return; + } + } else { + sou_kokoro_toguru = 0; + } + } + + sou_last_kokoro_counter = sou_game_frame_counter; + sou_kokoro_toguru = 0; + sou_last_sys_trg_num = a; + switch (a) { + case 0x424: { + if (sou_scene_mode != 1) { + a = 0x16e; + } + } break; + case 0xd: { + sou_SE_SENTAKU_KETTEI_timer = 1; + } break; + case 0x8005: { + if (sou_SE_SENTAKU_KETTEI_timer != 0) { + v = TRUE; + } + } break; + } + + if (!v) { + Sou_TrgStart(a, f31, f30, f29, j, k, f28); + } +} + +void Sou_WalkSe(u16 a, u16 b, f32 c, u8 d, f32 e) { + u8 r29 = 0x3f; + u8 unused = 0; + u16 v = 0; + f32 f29 = 1.f; + f32 f30 = 1.; + + if (a == 0 || c > SOU_ONGEN_AREA1) { + // needed to match, probably stripped assert; + (void)0; + return; + } + + r29 = angle2pan(b, c); + f30 = distance2vol(c); + v = Nap_GetRandom(); + v >>= 0xe; + if (sou_player_dash == 3) { + a = a + 40; + } + if ((sou_walk_flag & 1) == 1) { + if (v == 3 && sou_last_walk_l == 0 && sou_last_walk_r == 0) { + a = a + 0x1e; + sou_last_walk_l = 1; + } else { + a = a + 0xa; + sou_last_walk_l = 0; + } + } else if (v == 3 && sou_last_walk_l == 0 && sou_last_walk_r == 0) { + a = a + 0x14; + sou_last_walk_r = 1; + } else { + sou_last_walk_r = 0; + } + sou_walk_flag++; + Sou_TrgStart(a, f30, e, f29, r29, d, c); +} + +void Na_PlyWalkSe(u16 a, u16 b, f32 c) { + u8 j = 0; + f32 v = 1.f; + if (sou_scene_mode) { + switch (sou_player_dash) { + case 1: { + v = 0.6f; + } break; + case 2: { + v = 0.8f; + } break; + case 3: { + v = 1.0f; + } break; + } + + Sou_WalkSe(a, b, c, j, v); + } +} + +void Na_PlyWalkSeRoom(u8 a, u16 b, f32 c) { + u16 r30 = 0; + u8 r31 = 0; + f32 f31 = 1.f; + if (sou_scene_mode) { + switch (sou_scene_mode) { + case 0xf: { + r31 = 0x32; + } break; + case 0x10: { + r31 = 0x32; + } break; + default: { + r31 = 5; + } break; + } + if (a == 0xff) { + r30 = 0x4204; + } else { + r30 = SE_FLOOR_DATA[a] + 0x42e6; + } + switch (sou_player_dash) { + case 1: { + f31 = 0.54f; + } break; + case 2: { + f31 = 0.71999997f; + } break; + case 3: { + f31 = 0.9f; + } break; + } + Sou_WalkSe(r30, b, c, r31, f31); + } +} + +void Na_NpcWalkSe(u16 a, u16 b, f32 c) { + u8 r31 = 0; + f32 f31 = 0.68f; + if (sou_scene_mode == 0 || sou_scene_mode == 0xc) { + (void)0; + return; + } + Sou_WalkSe(a, b, c, r31, f31); +} + +void Na_NpcWalkSeRoom(u8 a, u16 b, f32 c) { + u16 r30 = 0; + u8 r31 = 0; + f32 f31 = 0.612f; + if (sou_scene_mode == 0 || sou_scene_mode == 0xe) { + (void)0; + return; + } + switch (sou_scene_mode) { + case 0xf: { + r31 = 0x32; + } break; + case 0x10: { + r31 = 0x32; + } break; + default: { + r31 = 5; + } break; + } + r30 = SE_FLOOR_DATA[a] + 0x42e6; + Sou_WalkSe(r30, b, c, r31, f31); +} + +extern "C" void Na_PlayerStatusLevel(u8 a, f32 b) { + sou_player_dash = a; + sou_player_speed = b; +} + +u8 Sou_TanboinHenkan(u8 a, u8 b) { + switch (a) { + case 0x5d: + return 0x01; + case 0x65: + return 0x14; + case 0x71: + return 0x29; + case 0x61: + return 0x0a; + case 0x6b: + return 0x1d; + case 0x6a: + return 0x1b; + case 0x53: + return 0x32; + case 0x54: + return 0x33; + case 0x55: + return 0x26; + case 0x56: + return 0x27; + case 0x57: + return 0x34; + case 0x58: + return 0x35; + case 0x59: + return 0x36; + case 0x5a: + return 0x37; + case 0x5b: + return 0x10; + case 0x5c: + return 0x38; + case 0x5e: + return 7; + case 0x5f: { + switch (b) { + case 0x65: + case 0x61: + return 0x23; + default: + return 0x18; + } + } + case 0x60: + return 0x09; + case 0x62: + return 0x11; + case 0x63: + return 0x12; + case 0x64: + return 0x00; + case 0x66: + return 0x17; + case 0x67: + return 0x18; + case 0x68: + return 0x19; + case 0x69: + return 0x1a; + case 0x6c: + return 0x21; + case 0x6d: + return 0x18; + case 0x6e: + return 0x22; + case 0x6f: + return 0x23; + case 0x70: + return 0x26; + case 0x72: + return 0x2d; + case 0x73: + return 0x2e; + case 0x74: + return 0x31; + case 0x75: + return 0x15; + case 0x76: + return 0x30; + } + return a; +} + +u8 Sou_ChouboinHenkan(u8 a, u8 b) { + switch (a) { + case 0x5d: + return 0x02; + case 0x65: + return 0x15; + case 0x71: + return 0x2a; + case 0x61: + return 0x0e; + case 0x6b: + return 0x1e; + case 0x6a: + return 0x1b; + case 0x53: + return 0x32; + case 0x54: + return 0x33; + case 0x55: + return 0x26; + case 0x56: + return 0x27; + case 0x57: + return 0x34; + case 0x58: + return 0x35; + case 0x59: + return 0x36; + case 0x5a: + return 0x37; + case 0x5b: + return 0x10; + case 0x5c: + return 0x38; + case 0x5e: + return 7; + case 0x5f: { + switch (b) { + case 0x65: + case 0x61: + return 0x23; + default: + return 0x18; + } + } + case 0x60: + return 0x09; + case 0x62: + return 0x11; + case 0x63: + return 0x12; + case 0x64: + return 0x00; + case 0x66: + return 0x17; + case 0x67: + return 0x18; + case 0x68: + return 0x19; + case 0x69: + return 0x1a; + case 0x6c: + return 0x21; + case 0x6d: + return 0x18; + case 0x6e: + return 0x22; + case 0x6f: + return 0x23; + case 0x70: + return 0x26; + case 0x72: + return 0x2d; + case 0x73: + return 0x2e; + case 0x74: + return 0x31; + case 0x75: + return 0x15; + case 0x76: + return 0x30; + } + return a; +} + +u8 Sou_ConnectCheck(u8 a, u8 b, u8 c) { + switch (a) { + case 0x5d: { + switch (b) { + case 0x65: + a = 0xf; + break; + case 0x68: + a = 0x2; + break; + case 0x6e: + a = 0x16; + break; + case 0x6a: + a = 0x39; + break; + case 0x6f: + a = 0x3a; + break; + } + } break; + case 0x61: { + switch (b) { + case 0x5d: + a = 0x15; + break; + case 0x6e: + a = 0xd; + break; + } + } break; + case 0x5e: { + switch (b) { + case 0x61: + a = 0x3b; + break; + case 0x75: + a = 0x3c; + break; + } + } break; + case 0x5f: { + switch (b) { + case 100: + a = 8; + break; + } + } break; + case 0x60: { + switch (b) { + case 0x6b: + a = 0x3d; + break; + } + } break; + case 0x62: { + switch (b) { + case 0x5d: + a = 0x35; + break; + case 0x6b: + a = 0x34; + break; + } + } break; + case 0x63: { + switch (b) { + case 0x61: + a = 0x17; + break; + case 0x6b: + a = 0x3e; + break; + } + } break; + case 0x64: { + switch (b) { + case 0x5d: + a = 0x3f; + break; + case 0x61: + a = 0x40; + break; + case 0x65: + a = 0x41; + break; + case 0x6b: + a = 0x42; + break; + } + } break; + case 0x65: { + switch (b) { + case 0x6e: + a = 0xc; + break; + case 0x81: + a = 5; + break; + case 0x62: + a = 0x43; + break; + case 0x6a: + a = 0x44; + break; + case 0x6f: + a = 0x45; + break; + case 0x70: + a = 0x46; + break; + } + } break; + case 0x67: { + switch (b) { + case 0x6f: + a = 0x31; + break; + } + } break; + case 0x69: { + switch (b) { + case 0x61: + a = 0x47; + break; + case 0x75: + a = 0x48; + break; + } + } break; + case 0x6a: { + switch (b) { + case 0x5d: + a = 0x38; + break; + case 99: + a = 0x1c; + break; + case 0x6b: + a = 0x49; + break; + } + } break; + case 0x6b: { + switch (b) { + case 0x6b: + a = 0x2a; + break; + case 0x73: + a = 6; + break; + case 0x75: + a = 0x1f; + break; + case 0x71: + a = 0x20; + break; + case 0x6e: + a = 0x2c; + break; + case 0x62: + a = 0x4a; + break; + case 100: + a = 0x4b; + break; + case 0x67: + a = 0x4c; + break; + case 0x6a: + a = 0x4d; + break; + } + } break; + case 0x6e: { + switch (b) { + case 0x61: + a = 0xe; + break; + } + } break; + case 0x6f: { + switch (b) { + case 0x61: + a = 0x37; + break; + case 100: + a = 0x24; + break; + case 0x65: + a = 0x36; + break; + case 0x71: + a = 0x25; + break; + case 0x6b: + a = 0x4f; + break; + } + } break; + case 0x70: { + switch (b) { + case 100: + a = 0x28; + break; + case 0x6b: + a = 0x50; + break; + } + } break; + case 0x71: { + switch (b) { + case 0x6c: + a = 0x51; + break; + } + } break; + case 0x73: { + switch (b) { + case 0x61: + a = 0x52; + break; + case 0x6b: + a = 0x33; + break; + } + } break; + case 0x75: { + switch (b) { + case 0x6b: + switch (c) { + case 0x71: + a = 0x77; + break; + } + } + } break; + case 0x76: { + switch (b) { + case 0x61: + a = 0x32; + } + break; + } + } + return a; +} + +u8 Sou_BoinShiinCheck(u8 a) { + switch (a) { + case 0x5d: + case 0x61: + case 0x65: + case 0x6a: + case 0x6b: + case 0x71: + return 0; + case 0x5e: + case 0x5f: + case 0x60: + case 0x62: + case 0x63: + case 0x64: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6c: + case 0x6d: + case 0x6e: + case 0x6f: + case 0x70: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + return 1; + } + return 2; +} + +void Na_VoiceSe(u8 a, u8 b, u8 c, s16 d, u8 e, u8 f) { + sou_Na_VoiceSeFlag = 1; + u8 i = 0; + u8 r28; + + switch (f) { + case 0: { + sou_num_org = a; + sou_num2_org = b; + sou_num3_org = c; + r28 = 0; + if (a == 0x85 && b == 0xff && c == 0xff) { + return; + } + if (a == 0x61 && b > 0x77 && Sou_BoinShiinCheck(sou_last_num) == 0 && + Sou_BoinShiinCheck(sou_last_num2) == 1) { + a = b; + r28 = 4; + } + if (b == 0x61 && c > 0x77 && Sou_BoinShiinCheck(sou_last_num2) == 0 && Sou_BoinShiinCheck(a) == 1) { + b = 0; + r28 = 4; + } + + if (r28 != 4) { + a = Sou_ConnectCheck(a, b, c); + if (a == sou_num_org) { + r28 = 1; + } else { + r28 = 2; + } + + switch (b) { + case 0xff: + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: { + r28 = 3; + switch (sou_last_num2) { + case 0xff: + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: { + r28 = 1; + } break; + } + } + } + } + + switch (r28) { + case 1: + case 4: { + if (Sou_BoinShiinCheck(a) == 0 && Sou_BoinShiinCheck(b) == 1 && c == 0x61) { + a = Sou_ChouboinHenkan(a, b); + } else { + a = Sou_TanboinHenkan(a, b); + } + sou_num2_request = b; + sou_num2_animal_id = d; + sou_num2_scale = e; + } break; + case 3: { + if (a > 0x77) { + break; + } + a = sou_last_num2; + b = sou_num_org; + c = sou_num2_org; + a = Sou_ConnectCheck(a, b, c); + if (a < 0x53 || a > 0x76) { + break; + } + a = Sou_TanboinHenkan(a, b); + } break; + case 2: + case 0: + default: + break; + } + break; + } break; + case 2: { + if (sou_voice_mode == 1) { + return; + } + switch (a) { + case 0xff: + return; + } + if (a == 0x61 && sou_num3_org > 0x77 && Sou_BoinShiinCheck(sou_last_num2) == 0 && + Sou_BoinShiinCheck(sou_num_org) == 1) { + a = 0; + } else { + a = Sou_TanboinHenkan(a, sou_num3_org); + } + } break; + } + switch (f) { + case 0: { + if (sou_num_org == sou_last_num2 && sou_num_org == sou_last_num) { + i = 1; + } + } break; + case 2: { + if (sou_num_org == sou_num_org && sou_num_org == sou_last_num2) { + i = 1; + } + } break; + } + sou_last_num = sou_num_org; + sou_last_num2 = sou_num2_org; + u8 unused = 0; + u8 r22 = 0; + u8 r27 = 0; + u8 r25 = 0; + u8 r29 = 0; + f32 f31 = 0.f; + f32 f30 = 0.f; + u8 r23; + if (d > 0x12b) { + return; + } + if ((sou_voice_mode == 0 && Nap_ReadSubPort(4, 0, 1) != sou_now_voice_seq)) { + return; + } + if (sou_scene_mode == 0) { + return; + } + if (a == 0x80) { + if (d == 0xfa) { + return; + } + switch (sou_voice_mode) { + case 0: + Na_MelodyVoice(d); + break; + case 1: + Na_SysTrgStart(0x106d); + break; + case 2: + default: + break; + } + return; + } + r29 = a; + if (sou_voice_se_toguru == 0) { + r22 = 0; + sou_voice_se_toguru = 1; + } else { + r22 = 1; + sou_voice_se_toguru = 0; + } + switch (sou_now_spec) { + case 2: { + sou_voice_se[0]._08 = 0.65f; + sou_voice_se[1]._08 = 0.65f; + sou_voice_se[0]._14 = 1.f; + sou_voice_se[1]._14 = 1.f; + } break; + case 3: { + sou_voice_se[0]._08 = 0.65f; + sou_voice_se[1]._08 = 0.65f; + sou_voice_se[0]._14 = 1.f; + sou_voice_se[1]._14 = 1.f; + } break; + case 4: { + sou_voice_se[0]._08 = 0.65f; + sou_voice_se[1]._08 = 0.65f; + sou_voice_se[0]._14 = 1.f; + sou_voice_se[1]._14 = 1.f; + } break; + case 5: { + sou_voice_se[0]._08 = 0.9f; + sou_voice_se[1]._08 = 0.9f; + sou_voice_se[0]._14 = 1.f; + sou_voice_se[1]._14 = 1.f; + } break; + case 6: { + sou_voice_se[0]._08 = 0.9f; + sou_voice_se[1]._08 = 0.9f; + sou_voice_se[0]._14 = 1.f; + sou_voice_se[1]._14 = 1.f; + } break; + case 7: { + sou_voice_se[0]._08 = 0.9f; + sou_voice_se[1]._08 = 0.9f; + sou_voice_se[0]._14 = 1.3f; + sou_voice_se[1]._14 = 1.3f; + } break; + case 8: { + sou_voice_se[0]._08 = 0.9f; + sou_voice_se[1]._08 = 0.9f; + sou_voice_se[0]._14 = 0.75f; + sou_voice_se[1]._14 = 0.75f; + } break; + case 9: { + sou_voice_se[0]._08 = 0.7f; + sou_voice_se[1]._08 = 0.7f; + sou_voice_se[0]._14 = 0.65f; + sou_voice_se[1]._14 = 0.65f; + } break; + } + switch (sou_voice_mode) { + case 0: { + switch (sou_now_spec) { + case 5: + case 6: { + switch (a) { + case 0x81: + case 0x84: + case 0x85: + case 0x86: + Na_SysTrgStart(0x106d); + a = 0; + break; + } + } break; + default: { + switch (a) { + case 0x86: { + Na_SysTrgStart(0x106d); + a = 0; + sou_nobasu_count = 0; + } break; + case 0x81: + case 0x84: + case 0x85: { + a = 0; + sou_nobasu_count = 0; + } break; + case 0x82: { + a = 0; + sou_nobasu_count = 0; + switch (sou_now_voice_seq) { + case 1: { + f31 = 1.24f; + } break; + case 2: { + f31 = 1.3f; + } break; + case 3: { + f31 = 1.13f; + } break; + } + sou_voice_se[0]._14 = sou_voice_se[0]._14 * f31; + sou_voice_se[1]._14 = sou_voice_se[0]._14; + } break; + case 0x83: { + a = 0; + sou_nobasu_count = 0; + sou_voice_se[0]._08 = sou_voice_se[0]._08 * 1.15f; + sou_voice_se[1]._08 = sou_voice_se[0]._08; + } break; + default: { + sou_nobasu_count = 0; + sou_now_boin = SHIIN2BOIN[a]; + } break; + } + } + + break; + } + if (sou_now_spec == 5 || sou_now_spec == 6 || r29 > 0x77) { + i = 0; + } + if (i == 1) { + r27 = Nap_GetRandom(); + a = r27 >> 2; + } + sou_last_voice = r29; + if (r29 <= 0x77 && sou_now_spec != 5) { + if (sou_now_spec != 6) { + switch (sou_message_status) { + case 1: { + if (sou_voice_effect_counter == 0) { + r27 = Nap_GetRandom(); + r25 = r27 >> 6; + sou_voice_effect_counter = r25 + 0xa; + } else { + sou_voice_effect_counter--; + } + switch (sou_voice_effect_counter) { + case 0: + case 1: + case 2: { + sou_voice_se[0]._18 = 1.25f; + sou_voice_se[1]._18 = 1.25f; + sou_voice_se[0]._0C = 1.25f; + sou_voice_se[1]._0C = 1.25f; + } break; + case 3: + case 4: { + sou_voice_se[0]._18 = 1.2f; + sou_voice_se[1]._18 = 1.2f; + sou_voice_se[0]._0C = 1.2f; + sou_voice_se[1]._0C = 1.2f; + } break; + case 9: + case 10: { + sou_voice_se[0]._18 = 1.25f; + sou_voice_se[1]._18 = 1.25f; + sou_voice_se[0]._0C = 1.25f; + sou_voice_se[1]._0C = 1.25f; + } break; + default: { + sou_voice_se[0]._18 = 0.9f; + sou_voice_se[1]._18 = 0.9f; + sou_voice_se[0]._0C = 1.05f; + sou_voice_se[1]._0C = 1.05f; + } break; + } + } break; + case 2: + case 4: + case 5: { + if (sou_voice_effect_counter == 0) { + r27 = Nap_GetRandom(); + r25 = r27 >> 6; + sou_voice_effect = r25 + 0xe; + sou_voice_effect_counter = 1; + } else if (sou_voice_effect_counter == sou_voice_effect) { + sou_voice_effect_counter = 0; + if (sou_voice_sad_toguru == 0) { + sou_voice_sad_toguru = 1; + } else { + sou_voice_sad_toguru = 0; + } + } else { + sou_voice_effect_counter++; + } + if (sou_voice_sad_toguru == 0) { + f31 = 1.f - sou_voice_effect_counter * 0.022f; + } else { + f31 = 1.1f - sou_voice_effect_counter * 0.022f; + } + sou_voice_se[0]._18 = f31; + sou_voice_se[1]._18 = f31; + if (sou_voice_sad_toguru == 0) { + f31 = 1.f - sou_voice_effect_counter * 0.025f; + } else { + f31 = 1.1f - sou_voice_effect_counter * 0.025f; + } + sou_voice_se[0]._0C = f31; + sou_voice_se[1]._0C = f31; + } break; + case 3: { + if (sou_voice_effect_counter == 0) { // c28 + r27 = Nap_GetRandom(); + r25 = r27 >> 6; + sou_voice_effect_counter = r25 + 0xa; + } else { + sou_voice_effect_counter--; + } + switch (sou_voice_effect_counter) { + case 0: + case 1: { + sou_voice_se[0]._18 = 1.05f; + sou_voice_se[1]._18 = 1.05f; + sou_voice_se[0]._0C = 1.05f; + sou_voice_se[1]._0C = 1.05f; + } break; + case 2: { + sou_voice_se[0]._18 = 0.9f; + sou_voice_se[1]._18 = 0.9f; + sou_voice_se[0]._0C = 1.15f; + sou_voice_se[1]._0C = 1.15f; + } break; + default: { + sou_voice_se[0]._18 = 1.15f; + sou_voice_se[1]._18 = 1.15f; + sou_voice_se[0]._0C = 1.05f; + sou_voice_se[1]._0C = 1.05f; + } break; + } // d48 + } break; + default: { + sou_voice_se[0]._18 = 1.f; + sou_voice_se[1]._18 = 1.f; + sou_voice_se[0]._0C = 1.f; + sou_voice_se[1]._0C = 1.f; + } break; + } + } + } + + if (r29 != 0x85 && r29 != 0x81 && r29 != 0x84) { + if (e != 0x20) { + if (e > 0x20) { + e = e - 0x20; + f31 = e; + f31 = f31 * 0.15f; + f30 = sou_voice_se[0]._08 + f31; + f30 = 4.f; + sou_voice_se[0]._08 = f30; + sou_voice_se[1]._08 = f30; + } else { + e = 0x1f - e; + f31 = e; + f31 = f31 * 0.02f; + f30 = sou_voice_se[0]._08 - f31; + f30 = 0.4f; + sou_voice_se[0]._08 = f30; + sou_voice_se[1]._08 = f30; + } + } + if (a != 0 && a <= 0x77) { + Sou_VoiceStart((u8)r22, a); + } + } + } break; + case 1: { + if (r29 != 0x81 && r29 != 0x84) { + Na_SysTrgStart(0x106d); + } + } break; + case 2: + break; + } +} + +void Na_MessageStatus(u8 a) { + sou_message_status = a; + sou_voice_effect = 0; + sou_voice_effect_counter = 0; +} + +void Na_MessageSpeed(u8 v) { + sou_message_speed = v; +} + +u8 Na_MessageSpeedGet() { + return sou_message_speed; +} + +void Na_OngenPos(u32 a, u8 b, u16 c, f32 d) { + u8 r25 = 0; + u8 r31 = 0; + u8 r29 = 0; + u8 r24 = 0; + u8 r27 = 0; + u8 r28 = 0; + + if (b == 0x44) { + u8 unused = Na_RoomIncectPos(a, b, c, d); + return; + } + + if (sou_sub_game_flag != 1 && sou_scene_mode != 0) { + + if ((sou_scene_mode == 8 || sou_scene_mode == 9) && (b == 0xb || b == 0x16)) { + return; + } + if (sou_ongenpos_kill_countdown == 1) { + return; + } + + //! @BUG: should be ARRAY_COUNT(sou_lev_ongen_data), reading unknown data + if (b == 0xb) { + for (r31 = 0; r31 < ARRAY_COUNT(sou_ongen_entry); r31++) { + if (sou_lev_ongen_data[r31]._08 == 0xc) { + for (r29 = 0; r29 < ARRAY_COUNT(sou_ongen_entry); r29++) { + if (sou_lev_ongen_data[r29]._08 == 0xb && sou_lev_ongen_data[r29]._0C < d) { + return; + } + } + } + } + } + + if (b == 0 || d > SOU_ONGEN_AREA1) { + (void)0; + return; + } + r25 = angle2pan(c, d); + for (r31 = 0; r31 < ARRAY_COUNT(sou_ongen_entry); r31++) { + if (a == sou_ongen_entry[r31]._00) { + r29 = r31; + r31 = ARRAY_COUNT(sou_ongen_entry); + r24 = 1; + } + } + if (r24 == 0) { + for (r31 = 0; r31 < ARRAY_COUNT(sou_ongen_entry); r31++) { + if (sou_ongen_entry[r31]._00 == 0) { + sou_ongen_entry[r31]._00 = a; + sou_ongen_entry[r31]._06 = b; + sou_ongen_entry[r31]._08 = r25; + sou_ongen_entry[r31]._0C = d; + sou_ongen_entry[r31]._09 = 1; + sou_ongen_entry[r31]._0A = 0; + r27 = r31; + r31 = ARRAY_COUNT(sou_ongen_entry); + } + } + for (r31 = 0; r31 < ARRAY_COUNT(sou_ongen_entry); r31++) { + if (sou_ongen_entry[r31]._00 != 0) { + sou_ongen_entry[r31]._04++; + } + } + for (r31 = 0; r31 < ARRAY_COUNT(sou_lev_ongen_data); r31++) { + if (sou_lev_ongen_data[r31]._08 == 0) { + r28 = 1; + r29 = r31; + r31 = 4; + } + } + if (r28 == 1) { + for (r31 = 0; r31 < ARRAY_COUNT(sou_lev_ongen_data); r31++) { + if (sou_lev_ongen_data[r31]._08 != 0) { + sou_lev_ongen_data[r31]._09++; + // r28 = 1; + // r29 = r31; + // r31 = ARRAY_COUNT(sou_lev_ongen_data); + } + } + sou_lev_ongen_data[r29]._09 = 1; + sou_lev_ongen_data[r29]._04 = sou_ongen_entry[r27]._00; + sou_lev_ongen_data[r29]._08 = sou_ongen_entry[r27]._06; + sou_lev_ongen_data[r29]._0C = sou_ongen_entry[r27]._0C; + sou_lev_se[r29]._10 = sou_ongen_entry[r27]._08; + sou_lev_ongen_data[r29]._00 = 1; + sou_lev_ongen_data[r29]._01 = 0; + return; + } else { + r29 = 0; + for (r31 = 0; r31 < ARRAY_COUNT(sou_lev_ongen_data); r31++) { + if (sou_lev_ongen_data[r31]._09 > r29) { + r29 = sou_lev_ongen_data[r31]._09; + r28 = r31; + } + } + Sou_LevStop((u8)r28, sou_lev_ongen_data[r28]._08); + for (r31 = 0; r31 < ARRAY_COUNT(sou_lev_ongen_data); r31++) { + if (sou_lev_ongen_data[r31]._09 != 0) { + sou_lev_ongen_data[r31]._09++; + } + } + sou_lev_ongen_data[r28]._09 = 1; + sou_lev_ongen_data[r28]._04 = sou_ongen_entry[r27]._00; + sou_lev_ongen_data[r28]._08 = sou_ongen_entry[r27]._06; + sou_lev_ongen_data[r28]._0C = sou_ongen_entry[r27]._0C; + sou_lev_se[r28]._10 = sou_ongen_entry[r27]._08; + sou_lev_ongen_data[r28]._00 = 1; + sou_lev_ongen_data[r28]._01 = 0; + sou_lev_ongen_data[r28]._10 = 9999.f; + sou_lev_ongen_data[r28]._03 = 0; + sou_lev_ongen_data[r28]._02 = 1; + } + } else { + sou_ongen_entry[r29]._06 = b; + sou_ongen_entry[r29]._08 = r25; + sou_ongen_entry[r29]._0C = d; + sou_ongen_entry[r29]._09++; + } + } +} + +void Sou_PosTrgStart(u16 a, u16 b, f32 c, u8 d, f32 e) { + u8 unused = 0; + u8 r27 = 0x3f; + u8 r26 = 0; + u16 r28 = 0; + u16 r29 = 0; + u16 r30 = 0; + f32 f30 = 1.f; + f32 f29 = 1.f; + switch (a) { + case 0x6e: + case 0x6f: + case 0x70: + case 0x71: { + if (a == 0 || c > 6400.f) { + return; + } + f30 = distance2vol4KITEKI(c); + } break; + default: { + if (a == 0 || c > SOU_ONGEN_AREA1) { + return; + } + f30 = distance2vol(c); + } break; + } + r27 = angle2pan(b, c); + if (a == 0x19) { + r26 = sou_metranome_counter & 3; + if (r26 == 0) { + a++; + } + sou_metranome_counter++; + } + if (a == 0x167) { + r28 = Nap_GetRandom(); + r30 = r28 & 1; + if (a == sou_last_uchiwa) { + a = a + r30 + 1; + if (a == 0x16a) { + a = 0x167; + } + } else { + a = a + r30; + } + sou_last_uchiwa = a; + } + if (a == 0x122) { + r28 = Nap_GetRandom(); + r30 = r28 & 3; + switch (sou_last_perio) { + case 0x122: { + r29 = r30 + 1; + } break; + case 0x123: + case 0x124: + case 0x125: { + if (r30 > sou_last_perio - 0x123) { + r29 = r30 + 1; + } else { + r29 = r30; + } + } break; + case 0x126: { + r29 = r30; + } break; + } + a = a + r29; + sou_last_perio = a; + } + Sou_TrgStart(a, f30, e, f29, r27, d, c); +} + +extern void Na_OngenTrgStartSpeed(u16 num, u16 angle, f32 distance, f32 speed) { + u8 r30 = 0; + u8 r29 = 0; + f32 opt_volume = 1.f; + OSAttention("BANDO_DEBUG:\n"); + OSAttention("BANDO_DEBUG: Na_OngenTrgStartSpeed called num=%04x \n", num); + OSAttention("BANDO_DEBUG: angle=%d distance=%f speed=%f\n", angle, distance, speed); + if (sou_scene_mode != 0) { + opt_volume = 0.5f + 0.07f * speed; + if (opt_volume > 0.9f) { + opt_volume = 0.9f; + } + OSAttention("BANDO_DEBUG: opt_volume=%f\n", opt_volume); + if (r29 == 0) { + Sou_PosTrgStart(num, angle, distance, r30, opt_volume); + } + } +} + +extern void Na_OngenTrgStart(u16 a, u16 b, f32 c) { + u8 r29 = 0; + u8 r31 = 0; + f32 f31 = 1.f; + if (sou_scene_mode == 0) { + return; + } + if (a == 0x12d && sou_now_bgm_num != 0) { + return; + } + switch (a) { + case 0x15c: { + sou_SE_ami_hit_water_timer = 1; + } break; + case 0x5c: { + if (sou_SE_ami_hit_water_timer != 0) { + r31 = 1; + } + } break; + case 0x43b: { + if (c > 375.f) { + r31 = 1; + } + if (sou_now_bgm_num == 0x42 || sou_now_bgm_num == 0x4e || sou_scene_mode == 0xc) { + r31 = 1; + } + } break; + case 0x511: + case 0x501: + case 0x509: + case 0x505: + case 0x50d: + case 0x521: + case 0x519: + case 0x515: + case 0x51d: + case 0x529: + case 0x525: { + if (sou_scene_mode == 0xe) { + r31 = 1; + } + } break; + } + + if (r31 == 0) { + Sou_PosTrgStart(a, b, c, r29, f31); + } +} + +extern void Na_SetOutMode(u8 a) { + sou_out_mode = a; + switch (a) { + case 0: { + Nap_SetS32(NA_MAKE_COMMAND(0xf0, 0, 0, 0), 0); + } break; + case 2: { + Nap_SetS32(NA_MAKE_COMMAND(0xf0, 0, 0, 0), 1); + } break; + case 1: { + Nap_SetS32(NA_MAKE_COMMAND(0xf0, 0, 0, 0), 3); + } break; + } +} + +extern void Na_SetVoiceMode(u8 a) { + sou_voice_mode = a; +} + +extern void Na_FloorTrgStart(u8 a, u16 b, f32 c) { + u16 r31 = 0; + u8 r30 = 0; + f32 f31 = 1.f; + if (sou_scene_mode != 0) { + r31 = SE_FLOOR_DATA[a]; + Sou_PosTrgStart(r31, b, c, r30, f31); + } +} + +extern void Na_SysLevStart(u8 a) { + u8 r30 = 0; + u8 r31 = 0; + u8 r28 = 0; + u8 r29 = 0; + for (r30 = 0; r30 < ARRAY_COUNT(sou_sys_lev); r30++) { + if (sou_sys_lev[r30]._0 == 0) { + for (r31 = 0; r31 < ARRAY_COUNT(sou_sys_lev); r31++) { + sou_sys_lev[r30]._1++; + } + r29 = r30; + goto offset_jmp; + } + } + r28 = 0; + for (r31 = 0; r31 < ARRAY_COUNT(sou_sys_lev); r31++) { + if (sou_sys_lev[r31]._1 > r28) { + r28 = sou_sys_lev[r31]._1; + r29 = r31; + } + } + for (r31 = 0; r31 < ARRAY_COUNT(sou_sys_lev); r31++) { + sou_sys_lev[r30]._1++; + } + +offset_jmp: + sou_sys_lev[r29]._0 = a; + sou_lev_se[r29 + 4]._08 = 1.f; + sou_lev_se[r29 + 4]._0C = 1.f; + if (a == 0x8d && sou_kiteki_counter == 0) { + sou_kiteki_counter = 1; + } + if (sou_scene_mode == 2 || sou_scene_mode == 0xe || sou_scene_mode == 0xf || sou_scene_mode == 0x10) { + switch (a) { + case 7: + case 8: + case 9: { + sou_lev_se[r29 + 4]._08 = 0.4f; + } break; + } + } + Sou_LevStart(r29 + 4, a); +} + +extern void Na_SysLevStop(u8 a) { + u8 r31 = 0; + u8 r30 = 0; + if (a == 0x8d) { + sou_kiteki_counter = 0; + } + for (r31 = 0; r31 < ARRAY_COUNT(sou_sys_lev); r31++) { + if (a == sou_sys_lev[r31]._0) { + sou_sys_lev[r31]._0 = 0; + sou_sys_lev[r31]._1 = 0; + r30 = r31; + r31 = ARRAY_COUNT(sou_sys_lev); + } + } + Sou_LevStop(r30 + 4, a); +} + +extern void Na_Pause(u8 a) { + if (a == sou_pause_flag) + return; + switch (a) { + case 0: { + switch (sou_scene_mode) { + case 2: { + sou_chime_volume = 0.45f; + Nap_SetF32(NA_MAKE_COMMAND(0x41, 2, 0, 0), 1.f); + } break; + default: { + sou_chime_volume = 1.f; + } break; + } + } break; + case 1: { + switch (sou_scene_mode) { + case 2: { + Nap_SetF32(NA_MAKE_COMMAND(0x41, 2, 0, 0), 0.f); + sou_chime_volume = 0.35f; + } break; + default: { + sou_chime_volume = 0.45f; + } break; + } + } break; + } + sou_pause_flag = a; +} + +extern void Na_RhythmPos(u32 a, u8 b, u16 c, f32 d) { + u8 r30 = 0; + u8 r31 = 0; + f32 f30 = 0.f; + if (sou_sub_game_flag != 1) { + if (d > SOU_ONGEN_AREA1) { + d = SOU_ONGEN_AREA1; + } + r30 = angle2pan(c, d); + f30 = distance2vol(d); + r31 = Na_GetRhythmSubTrack(a); + Nap_SetF32(NA_MAKE_COMMAND(1, 2, r31, 0), f30); + Nap_SetS8(NA_MAKE_COMMAND(3, 2, r31, 0), r30); + } +} + +extern void Na_SpecChange(int a) { + if (a != sou_now_spec) { + Nap_SetS32(NA_MAKE_COMMAND(0x83, 4, 0, 0), 0); + Nap_SetS32(NA_MAKE_COMMAND(0xe3, 0, 0, 0), 0); + Nap_SetS32(NA_MAKE_COMMAND(0xe3, 0, 0, 0), 1); + switch (a) { + case 2: + case 5: + case 7: + case 9: { + sou_now_voice_seq = 1; + Nap_SetS32(NA_MAKE_COMMAND(0x82, 4, 0xf3, 0), 0); + } break; + case 3: { + sou_now_voice_seq = 2; + Nap_SetS32(NA_MAKE_COMMAND(0x82, 4, 0xf4, 0), 0); + } break; + case 4: + case 6: + case 8: { + sou_now_voice_seq = 3; + Nap_SetS32(NA_MAKE_COMMAND(0x82, 4, 0xf5, 0), 0); + } break; + } + sou_now_spec = a; + } +} + +extern void Na_MDPlayerPos(u16 a, f32 e, u16 b, u16 c, u32 d) { + u8 r30 = 0; + f32 f31 = 0.f; + u8 r31 = 0; + if (sou_sub_game_flag != 1) { + switch (c) { + case 1: + case 2: + case 3: + case 4: + case 5: { + r31 = 0x30; + sou_md_bgm_boost_pasent = 1.08f; + Na_OngenPos(d, 0x4e, a, e); + } break; + case 6: + case 7: + case 8: { + r31 = 0xe3; + sou_md_bgm_boost_pasent = 1.4f; + } break; + case 9: + case 0xa: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + case 0x10: { + sou_md_bgm_boost_pasent = 1.f; + r31 = 0; + } break; + } + Na_BGMFilter(r31); + r30 = angle2pan(a, e); + f31 = distance2vol4MD(e); + if (sou_pause_flag == 1) { + f31 = f31 * 0.5f; + } + f31 *= sou_md_bgm_boost_pasent; + Sou_GroupControl_MD(1, r30, f31); + Sou_GroupControl_MD(3, r30, f31); + } +} + +extern void Na_BGMVolume(f32 a, u16 b) { + if (a > 1.f) { + a = 1.f; + } + if (a < 0.f) { + a = 0.f; + } + if (b > 0x7fff) { + b = 0x7fff; + } + if (b == 0) { + Nap_SetF32(NA_MAKE_COMMAND(0x41, 1, 0, 0), a); + Nap_SetF32(NA_MAKE_COMMAND(0x41, 3, 0, 0), a); + sou_bgm1_vol_now = a; + sou_bgm2_vol_now = a; + sou_bgm_vol_move_time = 0; + sou_bgm_vol_move_counter = 0; + } else { + sou_bgm_vol_move_target = a; + sou_bgm_vol_move_time = b; + sou_bgm_vol_move_counter = b; + } +} + +extern void Na_RestartPrepare() { + sou_NeosBootCheck_ok = 0; + Nap_FlushPort(); + u32 unused = Nap_StartSpecChange(0); + u32 unused2 = Nap_SendStart(); +} + +extern u8 Na_CheckRestartReady() { + return Nap_CheckSpecChange(); +} + +extern void Na_Restart() { + if (sou_NeosBootCheck_ok == 0) { + sou_NeosBootCheck_ok = 2; + Na_GameFrame(); + } +} + +extern u8 Na_SubGameOK() { + u8 ret = 0; + if (AG.groups[1].flags.enabled == 0 && AG.groups[3].flags.enabled == 0 && AG.groups[0].flags.enabled == 0) { + ret = 1; + } else { + ret = 0; + } + return ret; +} + +extern void Na_KishaStatusTrg(u8 a) { + if (sou_scene_mode != 6) { + switch (a) { + case 0: { + sou_kisha_status = 1; + } break; + case 1: { + sou_kisha_status = 2; + if (sou_scene_mode == 2 || sou_scene_mode == 0xe) { + Na_OngenTrgStart(0x6e, sou_kisha_angle, sou_kisha_distance); + } else { + Na_OngenTrgStart(0x70, sou_kisha_angle, sou_kisha_distance); + } + } break; + case 2: { + sou_kisha_status = 3; + Na_OngenTrgStart(0x73, sou_kisha_angle, sou_kisha_distance); + } break; + case 3: { + sou_kisha_status = 4; + if (sou_scene_mode == 2 || sou_scene_mode == 0xe) { + Na_OngenTrgStart(0x6f, sou_kisha_angle, sou_kisha_distance); + } else { + Na_OngenTrgStart(0x71, sou_kisha_angle, sou_kisha_distance); + } + } break; + case 4: { + sou_kisha_status = 0; + } break; + } + } +} + +extern void Na_KishaStatusLevel(f32 speed, u32 ongenNum1, u16 angle1, f32 distance1, u32 ongenNum2, u16 angle2, + f32 distance2) { + f32 f30 = 0.f; + f32 f29 = 0.f; + sou_kisha_angle = angle1; + sou_kisha_distance = distance1; + sou_kisha_angle2 = angle2; + sou_kisha_distance2 = distance2; + if (sou_kisha_status != 0) { + Na_OngenPos(ongenNum1, 0x10, angle1, distance1); + f30 = 20.f - 2.5f * speed; + f29 = 90.f - 11.5f * speed; + if (sou_shu_count == 4 && speed > 0.4f) { + Na_OngenTrgStart(0x3b, angle1, distance1); + } + if (sou_tonton_count == 10 && speed > 0.4f) { + Na_OngenTrgStart(0x3f, angle2, distance2); + } + if (sou_shu_count > (u16)f30) { + sou_shu_count = 0; + } + if (sou_tonton_count > (u16)f29) { + sou_tonton_count = 0; + } + sou_shu_count++; + sou_tonton_count++; + } +} + +extern void Na_TTKK_ARM(u8 a) { + if (sou_now_bgm_num == 0x2b) { + if (a == 0) { + Nap_SetS8(NA_MAKE_COMMAND(0x8, sou_now_bgm_handle, 0, 0), 0); + Nap_SetS8(NA_MAKE_COMMAND(0x8, sou_now_bgm_handle, 1, 0), 0); + Nap_SetS8(NA_MAKE_COMMAND(0x8, sou_now_bgm_handle, 2, 0), 0); + } else { + Nap_SetS8(NA_MAKE_COMMAND(0x8, sou_now_bgm_handle, 0, 0), 1); + Nap_SetS8(NA_MAKE_COMMAND(0x8, sou_now_bgm_handle, 1, 0), 1); + Nap_SetS8(NA_MAKE_COMMAND(0x8, sou_now_bgm_handle, 2, 0), 1); + } + } +} + +extern void Na_BgmMuteClear() { + u8 unused = 0; + if (sou_now_bgm_handle == 1) { + Nap_SetU16(NA_MAKE_COMMAND(0x90, 1, 0, 0), -1); + Nap_SetS8(NA_MAKE_COMMAND(0x8, 1, 0xff, 0), 0); + } else { + Nap_SetU16(NA_MAKE_COMMAND(0x90, 3, 0, 0), -1); + Nap_SetS8(NA_MAKE_COMMAND(0x8, 3, 0xff, 0), 0); + } +} + +extern u8 Na_BgmFadeoutCheck() { + u8 ret = 0; + if (AG.groups[1].flags.enabled == 0 && AG.groups[3].flags.enabled == 0) { + ret = 1; + } else { + ret = 0; + } + return ret; +} + +extern u8 Na_SeFadeoutCheck() { + u8 r31 = 0; + u8 ret = 1; + if (sou_se_fadeout_flag == 0) { + return 1; + } + for (r31 = 0; r31 < ARRAY_COUNT(sou_se_fade); r31++) { + if (sou_se_fade[r31]._0) { + ret = 0; + } + } + if (ret == 1) { + sou_se_fadeout_flag = 2; + } + return ret; +} + +__declspec (export) extern void Na_BgmTrOn(u8 a) { + Nap_SetS8(NA_MAKE_COMMAND(0x8, sou_now_bgm_handle, a, 0), 0); +} + +__declspec (export) extern void Na_BgmTrOff(u8 a) { + Nap_SetS8(NA_MAKE_COMMAND(0x8, sou_now_bgm_handle, a, 0), 1); +} + +extern void Na_SubGameStart() { + sou_sub_game_flag = 1; + sou_NeosBootCheck_ok = 4; + u32 unused = Nap_SendStart(); +} + +extern void Na_SubGameEnd() { + sou_NeosBootCheck_ok = 3; + u32 unused = Nap_SendStart(); +} + +extern void Na_SceneMode(u8 a) { + u8 unused = 0; + if (a != sou_scene_mode) { + sou_ongenpos_kill_countdown = 0; + sou_se_fadeout_flag = 0; + switch (a) { + case 0: { + sou_chime_volume = 0.f; + sou_chime_status = 0; + switch (sou_scene_mode) { + case 1: + case 3: + break; + case 0xb: { + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + } break; + } + } break; + case 1: { + Na_TrgSeEcho(0); + Na_LevSeEcho(0); + na_melody_id_hist[0] = -1; + na_melody_id_hist[1] = -1; + Na_BGMVolume(1.f, 0); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 2, 0, 0), 0); + sou_chime_volume = 1.f; + sou_chime_status = 1; + switch (sou_scene_mode) { + case 8: + case 9: { + } break; + case 1: + case 2: + case 3: + case 4: + default: + case 7: { + Sou_lev_ongen_data_struct_clear(); + Sou_SeVolumeReset(); + } break; + case 0: { + Sou_lev_ongen_data_struct_clear(); + Sou_SeVolumeReset(); + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + } break; + case 6: + case 5: { + Sou_lev_ongen_data_struct_clear(); + Sou_SeVolumeReset(); + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + int unused = Nap_SendStart(); + } break; + } + } break; + case 0xf: + case 0x10: { + Na_TrgSeEcho(1); + Na_LevSeEcho(1); + sou_chime_volume = 0.45f; + sou_chime_status = 1; + Sou_lev_ongen_data_struct_clear(); + Sou_SeVolumeReset(); + } break; + case 2: + case 0xa: { + switch (sou_scene_mode) { + case 0x11: { + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + Nap_SetS32(NA_MAKE_COMMAND(0x82, 2, 0xf6, 0), 0); + Sou_lev_ongen_data_struct_clear(); + Sou_SeVolumeReset(); + sou_sub_game_flag = 0; + } break; + default: { + sou_chime_volume = 0.45f; + sou_chime_status = 1; + Sou_lev_ongen_data_struct_clear(); + Sou_SeVolumeReset(); + Nap_SetS32(NA_MAKE_COMMAND(0x82, 2, 0xf6, 0), 0); + Nap_SetF32(NA_MAKE_COMMAND(0x41, 2, 0, 0), 1.f); + } break; + } + } break; + case 3: { + Sou_lev_ongen_data_struct_clear(); + Sou_SeVolumeReset(); + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + sou_chime_status = 0; + sou_chime_volume = 0.f; + } break; + case 4: { + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + sou_chime_status = 0; + sou_chime_volume = 0.f; + } break; + case 5: { + sou_chime_status = 0; + Nap_SetS32(NA_MAKE_COMMAND(0x83, 0, 0, 0), 0xb4); + } break; + case 6: { + sou_chime_status = 0; + Nap_SetS32(NA_MAKE_COMMAND(0x83, 0, 0, 0), 0); + } break; + case 7: { + sou_chime_status = 0; + sou_chime_volume = 0.f; + } break; + case 8: + case 9: { + sou_chime_status = 0; + sou_chime_volume = 0.f; + Nap_SetS32(NA_MAKE_COMMAND(0x82, 0, 0xf2, 0), 0); + Sou_lev_ongen_data_struct_clear(); + Sou_SeVolumeReset(); + Na_BGMVolume(1.f, 0); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 2, 0, 0), 0); + } break; + case 0xb: + case 0x12: { + sou_chime_status = 0; + Nap_SetS32(NA_MAKE_COMMAND(0x83, 0, 0, 0), 0x168); + } break; + case 0xc: { + sou_ongenpos_kill_countdown = 0x46; + Sou_SeFadeout(0x46); + switch (sou_scene_mode) { + case 0xd: { + sou_chime_status = 0; + } break; + } + } break; + case 0xd: { + sou_chime_status = 1; + sou_ongenpos_kill_countdown = 0x46; + } break; + case 0xe: { + sou_ongenpos_kill_countdown = 0x1e; + sou_chime_status = 1; + Nap_SetS32(NA_MAKE_COMMAND(0x83, 2, 0, 0), 0xd8); + Sou_SeFadeout(0x23); + Na_BgmStop(0xd8); + } break; + case 0x11: { + Nap_SetS32(NA_MAKE_COMMAND(0x83, 1, 0, 0), 0x168); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 3, 0, 0), 0x168); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 0, 0, 0), 0xb4); + Nap_SetS32(NA_MAKE_COMMAND(0x83, 2, 0, 0), 0xb4); + } break; + } + sou_scene_mode = a; + } +} + +extern u8 Na_RoomIncectPos(int a, u8 b, u16 c, f32 d) /*r18:a, r24:b, r19:c, f31:d*/ { + u8 r30 = 0; + u8 r28 = 0; + u8 r31 = 0; + u8 r25 = 0; + u8 r21 = 0; + u8 r27 = 0; + u16 r23 = 0; + u8 r29 = 0; + u8 r20 = 0; + u8 r22 = 0; + u8 r26 = 0; + if (sou_sub_game_flag == 1) { + return r22; + } + b = b - 0x36; + if (sou_scene_mode == 2) { + r27 = Nap_ReadGrpPort(2, 2); + } else { + r27 = (sou_game_frame_counter & 0x78) >> 3; + } + if (r27 > 0xf) { + r27 = 0; + } + + for (r30 = 0; r30 < ARRAY_COUNT(sou_room_ins); r30++) { + if (a == sou_room_ins[r30]._00) { + r28 = r30; + r30 = ARRAY_COUNT(sou_room_ins); + r21 = 1; + } + } + + if (r21 == 0) { + for (r30 = 0; r30 < ARRAY_COUNT(sou_room_ins); r30++) { + if (sou_room_ins[r30]._00 == 0) { + r23 = Nap_GetRandom(); + r29 = r23 & 0xf; + r29 = r29 + SE_ROOM_INS_RANDOM_OFFSET[b]; + + for (r31 = 0; r31 < ARRAY_COUNT(sou_room_ins); r31++) { + if (r29 == sou_room_ins[r31]._07) { + r29 = r29 + 1; + r31 = 0; + r26++; + if (r26 > ARRAY_COUNT(sou_room_ins)) { + r26 = 0; + r31 = ARRAY_COUNT(sou_room_ins); + } + } + } + sou_room_ins[r30]._07 = r29; + sou_room_ins[r30]._00 = a; + sou_room_ins[r30]._04 = 1; + sou_room_ins[r30]._05 = 0; + sou_room_ins[r30]._06 = r27; + r30 = ARRAY_COUNT(sou_room_ins); + for (r31 = 0; r31 < ARRAY_COUNT(sou_trg_se); r31++) { + for (r25 = 0; r25 < ARRAY_COUNT(SE_ROOM_INS_DATA); r25++) { + if (sou_trg_se[r31]._00 == SE_ROOM_INS_DATA[r25]) { + r20 = 1; + } + } + } + if (r20 == 0) { + Na_OngenTrgStart(SE_ROOM_INS_DATA[b], c, d); + r22 = 1; + } + } + } + } else { + if (sou_room_ins[r28]._06 != r27 && sou_room_ins[r28]._07 != 0) { + switch (r27) { + case 0: + case 2: + case 4: + case 6: + case 8: + case 10: + case 12: + case 14: { + if (sou_room_ins[r28]._07 == 1) { + Na_OngenTrgStart(SE_ROOM_INS_DATA[b], c, d); + r22 = 1; + r23 = Nap_GetRandom(); + r29 = r23 & 0xf; + r29 = r29 + SE_ROOM_INS_RANDOM_OFFSET[b]; + for (r31 = 0; r31 < ARRAY_COUNT(sou_room_ins); r31++) { + if (r29 == sou_room_ins[r31]._07) { + r29 = r29 + 1; + r31 = 0; + r26++; + if (r26 > ARRAY_COUNT(sou_room_ins)) { + r26 = 0; + r31 = ARRAY_COUNT(sou_room_ins); + } + } + } + sou_room_ins[r28]._07 = r29; + } + sou_room_ins[r28]._07--; + } break; + } + } + sou_room_ins[r28]._04++; + sou_room_ins[r28]._06 = r27; + } + return r22; +} + +extern void Na_FurnitureInstPos(int a, u16 b, f32 c) { + u8 r31 = 0; + u8 r29 = 0; + f32 f31 = 0.f; + u8 r30 = 0; + if (sou_sub_game_flag != 1) { + for (r31 = 0; r31 < ARRAY_COUNT(na_melody_id_hist); r31++) { + if (a == na_melody_id_hist[r31]) { + r30 = r31 + 0xe; + r29 = angle2pan(b, c); + f31 = distance2vol(c); + Nap_SetF32(NA_MAKE_COMMAND(1, 2, r30, 0), f31); + Nap_SetS8(NA_MAKE_COMMAND(3, 2, r30, 0), r29); + return; + } + } + } +} + +extern void Na_TrgSeEcho(u8 a) { + u8 i = 0; + u8 unused = 0; + for (i = 0; i < ARRAY_COUNT(sou_trg_se); i++) { + sou_trg_se[i]._1B = a; + } +} + +extern void Na_LevSeEcho(u8 a) { + u8 i = 0; + for (i = 0; i < ARRAY_COUNT(sou_lev_se); i++) { + sou_lev_se[i]._13 = a; + } +} + +extern void Na_BGMFilter(u8 a) { + u8 unused = 0; + int r31 = 0; + void* r30 = 0; + static int init = 1; + u8 unused1 = 0; + f32 unused2 = 0.f; + u8 unused3 = 0; + f32 unused4 = 0.f; + sou_internal_filter_status = a; + if (sou_filter_status != a) { + if (init != 0) { + if ((((u32)&SOU_FIR_STATE_COPY) & 0xf) != 0) { + SOU_FIR_STATE = &SOU_FIR_STATE_COPY[2]; + } else { + SOU_FIR_STATE = &SOU_FIR_STATE_COPY[0]; + } + init = 0; + } + r31 = a; + r30 = SOU_FIR_STATE; + if (sou_now_bgm_handle == 1) { + Nap_SetU16(NA_MAKE_COMMAND(0x90, 1, 0, 0), -1); + Nap_SetS32(NA_MAKE_COMMAND(0x13, 1, 0xff, r31), (s32)r30); + } else { + Nap_SetU16(NA_MAKE_COMMAND(0x90, 3, 0, 0), -1); + Nap_SetS32(NA_MAKE_COMMAND(0x13, 3, 0xff, r31), (s32)r30); + } + } +} + +extern void Na_RoomType(u8 a) { + if (sou_room_type != a) { + switch (a) { + case 0: { + SOU_ONGEN_AREA1 = 540.f; + } break; + case 1: { + SOU_ONGEN_AREA1 = 540.f; + SOU_ONGEN_AREA2 = 545.f; + } break; + case 2: { + SOU_ONGEN_AREA1 = 470.f; + SOU_ONGEN_AREA2 = 520.f; + } break; + case 3: { + SOU_ONGEN_AREA1 = 510.f; + SOU_ONGEN_AREA2 = 545.f; + } break; + } + sou_room_type = a; + } +} + +extern u8 Na_CheckNeosBoot() { + return sou_NeosBootCheck_ok == 3 ? 1 : 0; +} + +extern void Na_Museum(u8 a) { + if (sou_museum_type != a) { + Na_BgmMuteClear(); + Nap_SetU16(NA_MAKE_COMMAND(0x90, sou_now_bgm_handle, 0, 0), BGM_MUTE_TABLE_MUSEUM[a]); + Nap_SetS8(NA_MAKE_COMMAND(8, sou_now_bgm_handle, 0xff, 0), 1); + sou_museum_type = a; + } +} + +extern int Na_GetSoundFrameCounter() { + return AG.frame_audio_task_count; +} + +extern void Na_kazagurumaLevel(f32 v) { + sou_kazaguruma_speed = v; +} diff --git a/src/static/jaudio_NES/game/game64_dummy.c_inc b/src/static/jaudio_NES/game/game64_dummy.c_inc new file mode 100644 index 00000000..ffb4bd6a --- /dev/null +++ b/src/static/jaudio_NES/game/game64_dummy.c_inc @@ -0,0 +1,209 @@ +#include "jaudio_NES/seqsetup.h" +#include "jaudio_NES/aramcall.h" +#include "jaudio_NES/wave_read.h" +#include "jaudio_NES/dvdthread.h" +#include "jaudio_NES/heapctrl.h" + +u8 NIN_SEQ[] ATTRIBUTE_ALIGN(32) = { 0xfe, 0x00, 0x78, 0xfd, 0x00, 0x5c, 0xc1, 0x09, 0x00, 0x00, 0x15, 0x88, 0x01, 0xe0, + 0x88, 0x01, 0xe0, 0x88, 0x01, 0xe0, 0xff, 0xa4, 0x07, 0x0c, 0xa4, 0x21, 0xe4, 0x9a, + 0x03, 0x40, 0x0a, 0x9c, 0x09, 0x00, 0x00, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x00, + 0x7f, 0x00, 0x18, 0x01, 0x46, 0x88, 0x01, 0x13, 0x81, 0x17, 0x28, 0x2d, 0x64, 0x1c, + 0x3c, 0x08, 0x1b, 0x64, 0x1c, 0x17, 0x30, 0x2d, 0x64, 0x00, 0xe7, 0x3c, 0x10, 0x1b, + 0x64, 0x00, 0xe7, 0x17, 0x28, 0x16, 0x64, 0x1c, 0x3c, 0x08, 0x0d, 0x64, 0x1c, 0x17, + 0x30, 0x16, 0x64, 0x00, 0xe7, 0x3c, 0x10, 0x0d, 0x64, 0x00, 0xe7, 0xff }; + +// has some ascii inside it, maybe embedded file, starts "IBNK" +u8 NIN_BANK[] ATTRIBUTE_ALIGN(32) = { + 0x49, 0x42, 0x4e, 0x4b, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x4e, 0x4b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x3f, 0x80, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x3f, 0x71, 0xa1, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, + 0x45, 0x52, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x20, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// has some ascii inside it, maybe embedded file, starts "WSYS" +u8 NIN_WAVE[] ATTRIBUTE_ALIGN(32) = { + 0x57, 0x53, 0x59, 0x53, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x3c, 0x00, 0x46, 0xfa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc6, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x17, 0xbb, 0x00, + 0x00, 0x81, 0x31, 0x00, 0x00, 0x81, 0x58, 0x09, 0xee, 0x0d, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, + 0xff, 0x00, 0x3c, 0x00, 0x46, 0xac, 0x44, 0x00, 0x00, 0x00, 0x48, 0xe0, 0x00, 0x00, 0x1d, 0xa3, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0xb0, 0x00, 0x00, 0x34, 0xb0, 0x09, 0xee, 0x0d, 0x47, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x69, 0x6e, 0x74, 0x65, + 0x6e, 0x64, 0x6f, 0x5f, 0x68, 0x69, 0x5f, 0x30, 0x2e, 0x61, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x57, 0x49, 0x4e, 0x46, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x2d, + 0x44, 0x46, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x2d, 0x45, 0x58, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x2d, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, + 0x43, 0x4e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xa0, 0x00, 0x00, 0x01, 0xc0, + 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x42, 0x43, 0x54, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +void __OK(u32 a) { + (void)a; + int r31 = Jaq_SetSeqData(0, NIN_SEQ, 0x60, 0); + int unused1 = Jaq_StartSeq(r31); +} + +u32 bootsound_ptr; +u32 bootsound_size; + +u32 dummy_callback(char* a, u32 b, u32 c, u32* d, JAHEAP* e) { + (void)a; + (void)b; + (void)c; + JAHEAP* heap2; + JAHEAP* heap; + Init_AramMotherHeap(); + heap = Get_AramMotherHeap(); + heap2 = Jac_AllocHeap(e, heap, bootsound_size); + if ((s32)heap2 == 0) { + return 0; + } + u32 p = (u32)e->_08; + int unused = DVDT_DRAMtoARAM(0, bootsound_ptr, p, bootsound_size, d, 0); + return p; +} + +extern void Bank_Init(); + +extern int Bank_Regist(void*, u32); + +void BootSound(u32 a, u32 b) { + bootsound_ptr = a; + bootsound_size = b; + Bank_Init(); + Wavegroup_Init(); + int unused1 = Wavegroup_Regist(NIN_WAVE, 0); + int unused2 = Bank_Regist(NIN_BANK, 0); + Jac_RegisterARAMCallback(dummy_callback); + int unused3 = WaveScene_Set(0, 0); + int unused4 = DVDT_CheckPass(0, 0, __OK); + Jac_RegisterARAMCallback(0); +} diff --git a/src/static/jaudio_NES/internal/audiothread.c b/src/static/jaudio_NES/internal/audiothread.c index 06e4c30a..846eb92c 100644 --- a/src/static/jaudio_NES/internal/audiothread.c +++ b/src/static/jaudio_NES/internal/audiothread.c @@ -25,7 +25,7 @@ #define AUDIOPROC_MESSAGE_NEOS_SYNC ((OSMessage)2) #define AUDIOPROC_MESSAGE_3 ((OSMessage)3) -OSThread jac_audioThread[3]; +OSThread jac_audioThread; OSThread jac_neosThread; OSThread jac_dvdThread; @@ -190,8 +190,8 @@ extern void StartAudioThread(void* pHeap, s32 heapSize, u32 aramSize, u32 flags) if ((flags & AUDIO_THREAD_FLAG_AUDIO)) { // point to top of audioStack u8* stack_p = audioStack; - OSCreateThread(&jac_audioThread[0], &audioproc, NULL, &stack_p[AUDIO_STACK_SIZE], AUDIO_STACK_SIZE, pri, 0); - OSResumeThread(&jac_audioThread[0]); + OSCreateThread(&jac_audioThread, &audioproc, NULL, &stack_p[AUDIO_STACK_SIZE], AUDIO_STACK_SIZE, pri, 0); + OSResumeThread(&jac_audioThread); } if ((flags & AUDIO_THREAD_FLAG_DVD)) { diff --git a/src/static/jaudio_NES/internal/dummyrom.c b/src/static/jaudio_NES/internal/dummyrom.c index 6a7be58a..a6c979b5 100644 --- a/src/static/jaudio_NES/internal/dummyrom.c +++ b/src/static/jaudio_NES/internal/dummyrom.c @@ -5,6 +5,7 @@ #include "jaudio_NES/os.h" #include "jaudio_NES/memory.h" +ALHeap aram_hp; u8* JAC_ARAM_DMA_BUFFER_TOP = nullptr; static u32 AUDIO_ARAM_TOP = 0; static u32 CARD_SECURITY_BUFFER = 0; @@ -30,7 +31,7 @@ extern u32 GetNeosRom_PreLoaded(void) { return init_load_size; } -extern void SetPreCopy_NeosRom(u8* load_addr, u32 load_size, BOOL cut_flag) { +extern u32 SetPreCopy_NeosRom(u8* load_addr, u32 load_size, BOOL cut_flag) { init_load_size = load_size; init_load_addr = load_addr; init_cut_flag = cut_flag; diff --git a/src/static/jaudio_NES/internal/dvdthread.c b/src/static/jaudio_NES/internal/dvdthread.c index 776c29ea..52c16e30 100644 --- a/src/static/jaudio_NES/internal/dvdthread.c +++ b/src/static/jaudio_NES/internal/dvdthread.c @@ -393,7 +393,7 @@ extern s32 DVDT_CheckFile(char* file) { return len; } -extern void DVDT_CheckPass(u32 owner, u32* status, Jac_DVDCallback callback) { +extern s32 DVDT_CheckPass(u32 owner, u32* status, Jac_DVDCallback callback) { DVDCall call; void* cb = (void*)&call; @@ -401,7 +401,7 @@ extern void DVDT_CheckPass(u32 owner, u32* status, Jac_DVDCallback callback) { call.callbackStatus = status; call.callback = callback; - DVDT_AddTask((TaskCallback)__DVDT_CheckBack, cb, 0x58); + return DVDT_AddTask((TaskCallback)__DVDT_CheckBack, cb, 0x58); } extern s32 Jac_CheckFile(char* file) {