diff --git a/README.md b/README.md index 26b4697f..e1ba846f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (90.6955%) +# banjo (90.5890%) diff --git a/include/enums.h b/include/enums.h index b38aedd4..c4f8fa16 100644 --- a/include/enums.h +++ b/include/enums.h @@ -357,6 +357,7 @@ enum button_e{ }; #define FACE_BUTTON(button) (button - BUTTON_A) +#define SIDE_BUTTON(button) (button - BUTTON_Z) enum joystick_e{ JOYSTICK_X = 0x0, diff --git a/include/functions.h b/include/functions.h index 77667837..2d09ea78 100644 --- a/include/functions.h +++ b/include/functions.h @@ -581,7 +581,7 @@ f32 climbGetBottomY(void); f32 climbGetTopY(void); void func_802596AC(f32 a0[3], f32 a1[3], f32 a2[3], f32 a3[3]); -void func_8024E55C(s32, void *); +void func_8024E55C(s32, s32 [6]); void __spawnqueue_add_1(GenMethod_1, s32); #define SPAWNQUEUE_ADD_1(method, arg0) __spawnqueue_add_1((GenMethod_1) (method), reinterpret_cast(s32, (arg0))) diff --git a/include/music.h b/include/music.h index baae070d..6d5f5ae0 100644 --- a/include/music.h +++ b/include/music.h @@ -28,7 +28,7 @@ typedef struct music_track_s{ typedef struct music_track_meta_s{ char *name; u16 unk4; - u8 pad6[2]; + // u8 pad6[2]; }MusicTrackMeta; #endif diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg index eb9d6d3d..8003d84c 100644 --- a/progress/progress_core1.svg +++ b/progress/progress_core1.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core1 - 81.7847% - 81.7847% + 81.0507% + 81.0507% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index 57e30694..e684ef7a 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 90.6955% - 90.6955% + 90.5890% + 90.5890% \ No newline at end of file diff --git a/src/SM/code_4070.c b/src/SM/code_4070.c index 74fd7d22..e46d08ac 100644 --- a/src/SM/code_4070.c +++ b/src/SM/code_4070.c @@ -4,7 +4,6 @@ //extern Actor *func_802D94B4(ActorMarker *, Gfx **, Mtx **, Vtx**); -void func_8024E55C(s32, void *); void func_80324E88(f32); //public diff --git a/src/core1/code_10A00.c b/src/core1/code_10A00.c new file mode 100644 index 00000000..e147ec0d --- /dev/null +++ b/src/core1/code_10A00.c @@ -0,0 +1,346 @@ +#include +#include "functions.h" +#include "variables.h" + + +#ifndef CORE2_DATA_CRC2 + #define CORE2_DATA_CRC2 0 +#endif + +extern s32 D_803727F4 = CORE2_DATA_CRC2; + +extern struct { + u8 pad0[4]; + s32 unk4; + u8 pad8[4]; + s32 unkC; +} D_80379B90; + +typedef struct { + s32 face_button[6]; + s32 side_button[3]; + s32 unk24[4]; + s32 start_button; +}Struct_core1_10A00_0; + +typedef struct { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + f32 unk8; + f32 unkC; + f32 joystick[2]; +}Struct_core1_10A00_1; + +/* .data */ +extern s32 D_80275D38; + +extern s32 D_80276574; + + +/* .bss */ +UNK_TYPE(s32) D_802810E0[4][5]; +u8 D_80281130; +Struct_core1_10A00_0 D_80281138[4]; +Struct_core1_10A00_0 D_80281218; +// u8 pad_80281230[0x20]; +Struct_core1_10A00_1 D_80281250[4]; +OSMesg D_802812B0; +OSMesg D_802812B4; +OSContPad D_802812B8[4]; +OSContPad D_802812D0; +OSMesgQueue D_802812D8; +OSMesgQueue D_802812F0; +f32 D_80281308[4]; +OSContStatus D_80281318; +u8 pad_D_80281320[0x8]; +s32 D_80281328; +OSThread D_80281330; +u8 pad_D_802814E0[0x200]; +f32 D_802816E0; +OSMesgQueue D_802816E8; +OSMesg D_80281700[4]; +u8 pad_D_80281710[1]; + +/* .h */ +void func_8024F224(void); +void func_8024F35C(bool arg0); +void func_8024F450(void); +void func_8024F4AC(void); + +/* .code */ +f32 func_8024E420(s32 arg0, s32 arg1, s32 arg2) { + f32 phi_f2; + + phi_f2 = 0.0125f; + if ((D_80379B90.unk4 != D_803727F4) || (D_80379B90.unkC != D_80276574)) { + phi_f2 = 0.00625f; + } + if (arg0 > 0) { + arg0 = (arg2 < arg0) ? arg2 : (arg0 < arg1) ? arg1 : arg0; + arg0 = (s32) ((arg0 - arg1) * 0x50) / (s32) (arg2 - arg1); + } else { + if (arg0 < 0) { + arg0 = (arg0 < -arg2) ? -arg2 : (-arg1 < arg0) ? -arg1 : arg0; + arg0 = (s32) ((arg0 + arg1) * 0x50) / (s32) (arg2 - arg1); + } + } + return phi_f2 *= arg0; +} + +void func_8024E55C(s32 controller_index, s32 dst[6]){ + dst[FACE_BUTTON(BUTTON_A)] = D_80281138[controller_index].face_button[FACE_BUTTON(BUTTON_A)]; + dst[FACE_BUTTON(BUTTON_B)] = D_80281138[controller_index].face_button[FACE_BUTTON(BUTTON_B)]; + dst[FACE_BUTTON(BUTTON_C_LEFT)] = D_80281138[controller_index].face_button[FACE_BUTTON(BUTTON_C_LEFT)]; + dst[FACE_BUTTON(BUTTON_C_DOWN)] = D_80281138[controller_index].face_button[FACE_BUTTON(BUTTON_C_DOWN)]; + dst[FACE_BUTTON(BUTTON_C_UP)] = D_80281138[controller_index].face_button[FACE_BUTTON(BUTTON_C_UP)]; + dst[FACE_BUTTON(BUTTON_C_RIGHT)] = D_80281138[controller_index].face_button[FACE_BUTTON(BUTTON_C_RIGHT)]; +} + +void func_8024E5A8(s32 controller_index, s32 dst[6]){ + dst[FACE_BUTTON(BUTTON_A)] = D_80281218.face_button[FACE_BUTTON(BUTTON_A)]; + dst[FACE_BUTTON(BUTTON_B)] = D_80281218.face_button[FACE_BUTTON(BUTTON_B)]; + dst[FACE_BUTTON(BUTTON_C_LEFT)] = D_80281218.face_button[FACE_BUTTON(BUTTON_C_LEFT)]; + dst[FACE_BUTTON(BUTTON_C_DOWN)] = D_80281218.face_button[FACE_BUTTON(BUTTON_C_DOWN)]; + dst[FACE_BUTTON(BUTTON_C_UP)] = D_80281218.face_button[FACE_BUTTON(BUTTON_C_UP)]; + dst[FACE_BUTTON(BUTTON_C_RIGHT)] = D_80281218.face_button[FACE_BUTTON(BUTTON_C_RIGHT)]; +} + +s32 func_8024E5E8(s32 arg0, s32 arg1){ + return D_802810E0[arg0][arg1]; +} + +s32 func_8024E60C(s32 controller_index, s32 dst[3]){ + dst[SIDE_BUTTON(BUTTON_Z)] = D_80281138[controller_index].side_button[SIDE_BUTTON(BUTTON_Z)]; + dst[SIDE_BUTTON(BUTTON_L)] = D_80281138[controller_index].side_button[SIDE_BUTTON(BUTTON_L)]; + dst[SIDE_BUTTON(BUTTON_R)] = D_80281138[controller_index].side_button[SIDE_BUTTON(BUTTON_R)]; +} + +s32 func_8024E640(s32 controller_index, s32 dst[3]){ + dst[SIDE_BUTTON(BUTTON_Z)] = D_80281218.side_button[SIDE_BUTTON(BUTTON_Z)]; + dst[SIDE_BUTTON(BUTTON_L)] = D_80281218.side_button[SIDE_BUTTON(BUTTON_L)]; + dst[SIDE_BUTTON(BUTTON_R)] = D_80281218.side_button[SIDE_BUTTON(BUTTON_R)]; +} + +f32 func_8024E668(s32 controller_index){ + return D_80281308[controller_index]; +} + +s32 func_8024E67C(s32 controller_index){ + return D_80281138[controller_index].start_button; +} + +s32 func_8024E698(s32 controller_index){ + if(func_8023DB5C() < 2){ + return 0; + } + + return D_80281138[controller_index].start_button; +} + +void func_8024E6E0(s32 controller_index, s32 *dst[4]){ + dst[0] = D_80281138[controller_index].unk24[0]; + dst[1] = D_80281138[controller_index].unk24[1]; + dst[2] = D_80281138[controller_index].unk24[2]; + dst[3] = D_80281138[controller_index].unk24[3]; +} + +void func_8024E71C(s32 controller_index, f32 dst[2]){ + if(func_802E4A08()){ + dst[0] = D_80281250[controller_index].joystick[0]; + dst[1] = D_80281250[controller_index].joystick[1]; + } + else{ + dst[0] = func_8024E420(D_802812B8[controller_index].stick_x, 7, 0x3B); + dst[1] = func_8024E420(D_802812B8[controller_index].stick_y, 7, 0x3D); + } +} + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_10A00/func_8024E7C8.s") +#else +void func_8024E7C8(void){ + u32 s0; + s32 sp5C; + + if(func_8023E000() == 3) + func_802E4384(); + + osSetThreadPri(NULL, 0x29); + D_802812D0.stick_x = D_802812B8[0].stick_x; + D_802812D0.stick_y = D_802812B8[0].stick_y; + D_802812D0.button = D_802812B8[0].button; + if( getGameMode() == GAME_MODE_6_FILE_PLAYBACK + || getGameMode() == GAME_MODE_7_ATTRACT_DEMO + || getGameMode() == GAME_MODE_8_BOTTLES_BONUS + || getGameMode() == GAME_MODE_A_SNS_PICTURE + || getGameMode() == GAME_MODE_9_BANJO_AND_KAZOOIE + ){ + s0 = START_BUTTON; + if(gctransition_8030BD98()){ + D_802816E0 += time_getDelta(); + } + if(D_802816E0 < 1.0 || getGameMode() == GAME_MODE_9_BANJO_AND_KAZOOIE){ + s0 = 0; + } + + if(D_802812D0.button & s0 || demo_readInput(D_802812B8, &sp5C) < 1){ + if(D_802812D0.button & s0){ + func_803204E4(0x64, 1); + } + else{ + func_803204E4(0x63, 1); + } + func_8033DD90(); + }//L8024E944 + }//L8024E94C +} +#endif + +void func_8024EF74(void){ + func_8024F35C(0); + if(!D_80281318.errno) + osContGetReadData(D_802812B8); +} + +#ifndef NONMATCHING +void func_8024EFB0(void *); +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_10A00/func_8024EFB0.s") +#else +void func_8024EFB0(void *arg0){ + while(1){ + osRecvMesg(&D_802812D8, &D_802812F0, 1); + if(D_80281328 == TRUE){ + func_8024EF74(); + } + else{ + osSendMesg(&D_802812D8, 0, 0); + } + } +} +#endif + +void func_8024F05C(void){ + osCreateMesgQueue(&D_802812D8, &D_802812B0, 1); + osCreateMesgQueue(&D_802812F0, &D_802812B4, 1); + osCreateThread(&D_80281330, 7, func_8024EFB0, NULL, &D_802816E0, 0x28); + osSetEventMesg(OS_EVENT_SI, &D_802812D8, &D_802812B0); + osContInit(&D_802812D8, &D_80281130, &D_80281318); + osContSetCh(1); + func_8024F224(); + func_802476DC(); + osStartThread(&D_80281330); +} + +int func_8024F12C(void){ + return D_80281318.errno ? 1 : 0; +} + +void func_8024F150(void){ + if(func_8024F12C()) + func_802DD008(0,0); +} + +void func_8024F180(void){ + if(func_8024F12C()) + func_802DD040(0,0); +} + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_10A00/func_8024F1B0.s") +#else +void func_8024F1B0(void){ + if(D_80281328 == 0){ + func_8024F35C(1); + osContStartReadData(&D_802812D8); + } +} +#endif + +void func_8024F1F0(void){ + osRecvMesg(&D_802812D8, NULL, 1); + func_8024E7C8(); +} + +void func_8024F224(void){ + s32 iController, j; + + for(iController = 0; iController < 4; iController++){ + D_80281250[iController].unk0 = 0; + D_80281250[iController].unk2 = 0; + D_80281250[iController].unk4 = 0; + D_80281250[iController].unk6 = 0; + D_80281250[iController].joystick[0] = 0.0f; + D_80281250[iController].joystick[1] = 0.0f; + D_80281250[iController].unk8 = 0.0f; + D_80281250[iController].unkC = 0.0f; + for(j = 0; j < 5; j++){ + D_802810E0[iController][j] = 0; + } + for(j = 0; j < 14; j++){ + D_80281138[iController].face_button[j] = 0; + } + D_80281308[iController] = 0.0f; + } +} + +void func_8024F2E4(s32 arg0, Struct_core1_10A00_1 *arg1){ + memcpy(arg1, D_80281250 + arg0, sizeof(Struct_core1_10A00_1)); +} + +void func_8024F328(s32 controller_index, s32 arg1){ + D_80281138[controller_index].side_button[SIDE_BUTTON(BUTTON_Z)] = arg1; +} + +OSMesgQueue * func_8024F344(void){ + return &D_802812F0; +} + +OSMesgQueue *func_8024F350(void){ + return &D_802812D8; +} + +#ifndef NONMATCHING +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_10A00/func_8024F35C.s") +#else +void func_8024F35C(bool arg0){ + s32 *ptr = &D_80281328; + if(!arg0) + func_8024F4AC(); + else + func_8024F450(); + + if(arg0 || D_802816E8.validCount == 1) + *ptr = arg0; + +} +#endif + +#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_10A00/func_8024F3B4.s") + +int func_8024F3C4(int arg0){ + return D_802812B8[arg0].button + D_802812B8[arg0].stick_x + D_802812B8[arg0].stick_y; +} + +OSContPad *func_8024F3F4(void){ + return &D_802812D0; +} + +/* initilizes D_802816E8 message queue */ +void func_8024F400(void){ + D_80275D38 = TRUE; + osCreateMesgQueue(&D_802816E8, &D_80281700, 5); + osSendMesg(&D_802816E8, 0, 0); +} + +void func_8024F450(void){ + if(!D_80275D38) + func_8024F400(); + osRecvMesg(&D_802816E8, 0, 1); + osSetEventMesg(OS_EVENT_SI, &D_802812D8, &D_802812B0); +} + +void func_8024F4AC(void){ + osSendMesg(&D_802816E8, 0, 0); +} diff --git a/src/core1/code_11AC0.c b/src/core1/code_11AC0.c index be0886b4..4b28d0c6 100644 --- a/src/core1/code_11AC0.c +++ b/src/core1/code_11AC0.c @@ -3,6 +3,7 @@ #include "variables.h" #include "music.h" +#include "n_libaudio.h" extern void func_8025F570(ALCSPlayer *, u8); extern void func_8025F510(ALCSPlayer *, u8, u8); @@ -23,16 +24,188 @@ void func_8024AF48(void); void func_8024FB8C(void); /* .data */ -extern MusicTrackMeta D_80275D40[0xB0]; -extern s32 D_802762C0; -extern s32 D_802762C4; +MusicTrackMeta D_80275D40[0xB0] = { + {"Blank", 15000}, + {"Scrap", 15000}, + {"Jungle 2", 20000}, + {"Snow 2", 20000}, + {"Bells", 21000}, + {"Beach", 20000}, + {"Swamp", 15000}, + {"Crab Cave", 20000}, + {"Title", 15000}, + {"Notes", 15000}, + {"Jinjo", 15000}, + {"Feather", 15000}, + {"Egg", 15000}, + {"Jigpiece", 28000}, + {"Sky", 0x7FFF}, + {"Spooky", 21000}, + {"Training", 15000}, + {"Lighthouse", 24000}, + {"Crab", 15000}, + {"Shell", 0x7FFF}, + {"Feather Inv", 15000}, + {"Extra life", 15000}, + {"Honeycomb", 15000}, + {"Empty honey piece", 15000}, + {"Extra honey", 15000}, + {"Mystery", 15000}, + {"You lose", 20000}, + {"Termite nest", 0x7FFF}, + {"Outside whale", 15000}, + {"Spell", 15000}, + {"Witch House", 23000}, + {"In whale", 0x4650}, + {"Desert", 20000}, + {"In spooky", 0x4650}, + {"Grave", 24000}, + {"Church", 28000}, + {"Sphinx", 20000}, + {"Invulnerabilty", 28000}, + {"Collapse", 15000}, + {"Snake", 15000}, + {"Sandcastle", 15000}, + {"Summer", 20000}, + {"Winter", 0x6978}, + {"Right", 28000}, + {"Wrong", 0x7D00}, + {"Achieve", 0x7D00}, + {"Autumn", 0x55F0}, + {"Default forest", 0x7530}, + {"5 Jinjos", 15000}, + {"Game over", 15000}, + {"Nintendo", 15000}, + {"Ship", 24000}, + {"Shark", 15000}, + {"Ship inside", 24000}, + {"100 Notes", 15000}, + {"Door Open", 15000}, + {"Organ sequence", 0x4650}, + {"Advent", 15000}, + {"Slalom", 15000}, + {"Race win", 15000}, + {"Race lose", 15000}, + {"Jigsaw magic", 15000}, + {"Oh dear", 15000}, + {"Up", 15000}, + {"Down", 15000}, + {"Shamen Hut", 0x4A38}, + {"Jig 10", 0x61A8}, + {"Carpet", 15000}, + {"Squirrel", 15000}, + {"Hornet", 15000}, + {"Treetop", 0x7D00}, + {"Turtle Shell", 0x61A8}, + {"House Summer", 15000}, + {"House Autumn", 15000}, + {"Out Buildings", 15000}, + {"Hornet 2", 15000}, + {"Cabins", 15000}, + {"Rain", 15000}, + {"Jigsaw Open", 15000}, + {"Jigsaw Close", 15000}, + {"Witch 1", 23000}, + {"Witch 2", 23000}, + {"Witch 3", 23000}, + {"Witch 4", 23000}, + {"Witch 5", 23000}, + {"Mr Vile", 15000}, + {"Bridge", 0x55F0}, + {"Turbo Talon Trot", 28000}, + {"Long legs", 28000}, + {"Witch 6", 23000}, + {"Boggy sad", 15000}, + {"Boggy happy", 15000}, + {"Quit", 15000}, + {"Witch 7", 23000}, + {"Witch 8", 23000}, + {"Spring", 0x4650}, + {"Squirrel attic", 0x6590}, + {"Lights", 15000}, + {"Box", 0x4268}, + {"Witch 9", 23000}, + {"Open up", 15000}, + {"Puzzle complete", 0x61A8}, + {"Xmas tree", 15000}, + {"Puzzle in", 15000}, + {"Lite tune", 15000}, + {"Open extra", 15000}, + {"Ouija", 0x7148}, + {"Wozza", 15000}, + {"Intro", 20000}, + {"Gnawty", 15000}, + {"Banjo's Pad", 15000}, + {"Pause", 15000}, + {"Cesspit", 0x61A8}, + {"Quiz", 15000}, + {"Frog", 20000}, + {"GameBoy", 15000}, + {"Lair", 15000}, + {"Red Extra", 0x7D00}, + {"Gold Extra", 0x7D00}, + {"Egg Extra", 0x7D00}, + {"Note door", 15000}, + {"Cheaty", 15000}, + {"Fairy", 20000}, + {"Skull", 0x61A8}, + {"Square Grunty", 0x61A8}, + {"Square Banjo", 0x61A8}, + {"Square Joker", 0x7530}, + {"Square Music", 0x61A8}, + {"Lab", 20000}, + {"Fade Up", 0x61A8}, + {"Puzzle Out", 15000}, + {"Secret Gobi", 20000}, + {"Secret Beach", 20000}, + {"Secret Ice", 20000}, + {"Secret Spooky", 20000}, + {"Secret Squirrel", 20000}, + {"Secret Egg", 20000}, + {"Jinjup", 0x7D00}, + {"Turbo Talon Trot short", 28000}, + {"Fade Down", 0x61A8}, + {"Big Jinjo", 0x7D00}, + {"T1000", 15000}, + {"Credits", 15000}, + {"T1000x", 20000}, + {"Big Door", 20000}, + {"Descent", 20000}, + {"Wind up", 20000}, + {"Air", 20000}, + {"Do jig", 20000}, + {"Picture", 28000}, + {"Piece up", 20000}, + {"Piece down", 20000}, + {"Spin", 20000}, + {"BarBQ", 15000}, + {"Chord1", 20000}, + {"Chord2", 20000}, + {"Chord3", 20000}, + {"Chord4", 20000}, + {"Chord5", 20000}, + {"Chord6", 20000}, + {"Chord7", 20000}, + {"Chord8", 20000}, + {"Chord9", 20000}, + {"Chord10", 20000}, + {"Shock1", 20000}, + {"Shock2", 20000}, + {"Shock3", 20000}, + {"Shock4", 20000}, + {"Sad grunt", 20000}, + {"Podium", 20000}, + {"Endbit", 20000}, + {"Rock", 20000}, + {"Last Bit", 20000}, + {"Unnamed piece", 15000}, + {"Unnamed piece", 15000}, + 0 +}; +s32 D_802762C0 = 0; +s32 D_802762C4 = 0; -/* .rodata */ -extern f32 D_80278180; -extern f32 D_80278184; - - -/* .data */ +/* .bss */ MusicTrack D_80281720[6]; MusicTrack **D_802820E0; ALSeqpConfig D_802820E8; @@ -40,10 +213,6 @@ u16 D_80282104; //called as u16 someplaces and s16 others ALBank * D_80282108; structBs D_80282110[0x20]; - - -/* .rodata */ - /* .code */ void func_8024F4E0(void){ s32 size; @@ -70,7 +239,7 @@ void func_8024F4E0(void){ D_802820E8.stopOsc = NULL; func_8023FA64(&D_802820E8); for(i = 0; i < 6; i++){ - n_alCSPNew(&D_80281720[i].cseqp, &D_802820E8); //alCSPNew + n_alCSPNew(&D_80281720[i].cseqp, &D_802820E8); } alBnkfNew(bnk_f, (u8 *)&D_EADE60); @@ -322,7 +491,7 @@ s32 func_802500C0(void){ return *(s16 *)&D_80282104; } -ALCSPlayer *func_802500CC(s32 arg0){ +N_ALCSPlayer *func_802500CC(s32 arg0){ return &D_80281720[arg0].cseqp; } @@ -362,8 +531,8 @@ void func_80250200(s32 arg0, s16 chan, s16 arg2, f32 arg3){ mask = osSetIntMask(OS_IM_NONE); tmpf = (!func_80250074(arg0))? func_8025F4A0(sp28, chan) :127.0f; - if(arg3 < D_80278180){ - arg3 = D_80278180; + if(arg3 < 0.0333333351f){ + arg3 = 0.0333333351f; } for(i = 0; i< 0x20; i++){ @@ -391,8 +560,8 @@ void func_80250360(s32 arg0, s32 arg1, f32 arg2){ sp24 = func_802500CC(arg0); sp1C = osSetIntMask(1); tempo = alCSPGetTempo(sp24); - if( arg2 < D_80278184){ - arg2 = D_80278184; + if( arg2 < 0.0333333351f){ + arg2 = 0.0333333351f; } for(i = 0; i < 0x20; i++){ if(D_80282110[i].unk8 == D_80282110[i].unk10 @@ -466,9 +635,8 @@ void func_80250604(s32 arg0, s32 arg1, f32 arg2){ #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_11AC0/func_80250650.s") #else void func_80250650(void) { - ALCSPlayer *csplayer; + N_ALCSPlayer *csplayer; s32 i; - s32 mask; for(i = 0; i < 0x20; i++){ csplayer = func_802500CC(D_80282110[i].unk0); @@ -482,7 +650,7 @@ void func_80250650(void) { alCSPSetTempo(csplayer, (s32) D_80282110[i].unk8); } else { func_8025F510(csplayer,D_80282110[i].chan, D_80282110[i].unk8); - if ((csplayer->chanMask) & (1U << D_80282110[i].chan)) { + if (((csplayer->chanMask) & (1 << D_80282110[i].chan))) { if (D_80282110[i].unk8 == 0.0) { func_8025F5C0(csplayer, D_80282110[i].chan); } diff --git a/src/core1/code_136D0.c b/src/core1/code_136D0.c index 87caf96a..75bfddc8 100644 --- a/src/core1/code_136D0.c +++ b/src/core1/code_136D0.c @@ -16,15 +16,11 @@ typedef struct struct_2a_s{ u32 bss_end; } struct2As; -extern u8 D_80363590; -extern u8 D_80379B90; extern u8 D_803A5D00; -extern u8 D_F55960; -extern u8 D_1048560; - -extern struct2As D_802762D0[] = { +/* .data */ +struct2As D_802762D0[] = { {"gs", 0x80286F90, 0x803863F0, 0x00F55960, 0x01048560, 0x80286F90, 0x80363590, 0x80363590, 0x80379B90, 0x80379B90, 0x803863F0}, {"coshow", 0x803863F0, 0x80386430, 0x010BCD00, 0x010BCD20, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, {"whale", 0x803863F0, 0x8038A000, 0x01048560, 0x0104C0E0, 0x803863F0, 0x80389AA0, 0x80389AA0, 0x80389F70, 0x80389F70, 0x8038A000}, @@ -41,12 +37,11 @@ extern struct2As D_802762D0[] = { {"witch", 0x803863F0, 0x80395470, 0x01098070, 0x010A6FD0, 0x803863F0, 0x80392CB0, 0x80392CB0, 0x80395350, 0x80395350, 0x80395470}, {"battle", 0x803863F0, 0x80392930, 0x010A6FD0, 0x010B3320, 0x803863F0, 0x80391380, 0x80391380, 0x80392740, 0x80392740, 0x80392930}, }; -extern u8 D_80286F90; -extern s32 D_80276564 = 15; +s32 D_80276564 = 15; +/* .bss */ enum overlay_e D_80282800; -extern u8 D_803863F0; void func_802513A4(void); @@ -115,8 +110,6 @@ int is_overlay_loaded(int overlay_id){ #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_136D0/load_overlay.s") #else bool load_overlay(enum overlay_e overlay_id){ - struct2As *rom_info; - if(overlay_id == 0) return FALSE; @@ -124,14 +117,13 @@ bool load_overlay(enum overlay_e overlay_id){ return FALSE; D_80282800 = overlay_id; - rom_info = &D_802762D0[D_80282800]; func_80253050( overlay_id, - rom_info->ram_start, rom_info->ram_end, - rom_info->unkC, rom_info->unk10, - rom_info->code_start, rom_info->code_end, - rom_info->data_start, rom_info->data_end, - rom_info->bss_start, rom_info->bss_end + D_802762D0[overlay_id].ram_start, D_802762D0[overlay_id].ram_end, + D_802762D0[overlay_id].unkC, D_802762D0[overlay_id].unk10, + D_802762D0[overlay_id].code_start, D_802762D0[overlay_id].code_end, + D_802762D0[overlay_id].data_start, D_802762D0[overlay_id].data_end, + D_802762D0[overlay_id].bss_start, D_802762D0[overlay_id].bss_end ); return TRUE; } @@ -143,11 +135,32 @@ s32 func_802512FC(void){ } #ifdef NONMATCHING +//this matches, but requires core2 section address to be linked to core +//needed for shiftability +extern u8 core2_VRAM_START[]; //core2 RAM start +extern u8 core2_VRAM_END[]; //core2 RAM end + +extern u8 core2_us_v10_rzip_ROM_START[]; +extern u8 core2_us_v10_rzip_ROM_END[]; +extern u8 core2_TEXT_START[]; +extern u8 core2_TEXT_END[]; +extern u8 core2_DATA_START[]; +extern u8 core2_DATA_END[]; +extern u8 core2_BSS_START[]; +extern u8 core2_BSS_END[]; + void func_80251308(void){ func_802512FC(); - func_80253050(0, &D_80286F90, &D_803863F0, &D_F55960, &D_1048560, &D_80286F90, &D_80363590, &D_80363590, &D_80379B90, &D_80379B90, &D_803863F0); + func_80253050(0, + core2_VRAM_START, core2_VRAM_END, + core2_us_v10_rzip_ROM_START, core2_us_v10_rzip_ROM_END, + core2_TEXT_START, core2_TEXT_END, + core2_DATA_START, core2_DATA_END, + core2_BSS_START, core2_BSS_END + ); func_802511C4(); } + #else #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_136D0/func_80251308.s") #endif diff --git a/src/core1/code_15770.c b/src/core1/code_15770.c index 09bb089d..c63a11fc 100644 --- a/src/core1/code_15770.c +++ b/src/core1/code_15770.c @@ -3,7 +3,7 @@ #include "variables.h" extern struct { - void *unk0; + u16 *unk0; int unk4; } D_80282FE0; diff --git a/src/core1/code_7F60.c b/src/core1/code_7F60.c index 2a242356..52495699 100644 --- a/src/core1/code_7F60.c +++ b/src/core1/code_7F60.c @@ -2,6 +2,7 @@ #include "functions.h" #include "variables.h" +extern f32 D_80275908; #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245980.s") @@ -47,12 +48,53 @@ void _guMtxIdentF_80245D44(float mf[4][4]) //static #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_8024632C.s") -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_802464B0.s") +void func_802464B0(f32 mf[4][4], f32 arg1){ + f32 c, s; + arg1 *= D_80275908; + _guMtxIdentF_80245D44(mf); + c = cosf(arg1); + mf[1][1] = c; + mf[2][2] = c; + s = sinf(arg1); + mf[1][2] = s; + mf[2][1] = -s; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80246510.s") +void func_80246510(f32 mf[4][4], f32 arg1){ + f32 c, s; + arg1 *= D_80275908; + _guMtxIdentF_80245D44(mf); + c = cosf(arg1); + mf[0][0] = c; + mf[2][2] = c; + s = sinf(arg1); + mf[2][0] = s; + mf[0][2] = -s; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80246570.s") +void func_80246570(f32 mf[4][4], f32 arg1){ + f32 c, s; + arg1 *= D_80275908; + _guMtxIdentF_80245D44(mf); + c = cosf(arg1); + mf[0][0] = c; + mf[1][1] = c; + s = sinf(arg1); + mf[0][1] = s; + mf[1][0] = -s; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_802465D0.s") +void func_802465D0(f32 mf[4][4], f32 arg1, f32 arg2, f32 arg3){ + _guMtxIdentF_80245D44(mf); + mf[0][0] = arg1; + mf[1][1] = arg2; + mf[2][2] = arg3; + mf[3][3] = 1.0f; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80246624.s") +void func_80246624(f32 mf[4][4], f32 arg1, f32 arg2, f32 arg3){ + _guMtxIdentF_80245D44(mf); + mf[3][0] = arg1; + mf[3][1] = arg2; + mf[3][2] = arg3; +} diff --git a/src/core1/code_EAF0.c b/src/core1/code_EAF0.c index c7519e9d..dd5c57a7 100644 --- a/src/core1/code_EAF0.c +++ b/src/core1/code_EAF0.c @@ -3,6 +3,7 @@ #include "variables.h" extern void guPerspective(Mtx *, u16*, f32, f32, f32, f32, f32); +extern f32 ml_vec3f_dot_product(f32[3], f32[3]); extern s32 D_A00001D8; /* .data */ @@ -11,7 +12,6 @@ extern f32 D_80275D24; //aspect extern f32 D_80275D28; //near extern f32 D_80275D2C; //far -extern s32 D_80275D38; /* .rodata */ extern f64 D_802779F0; @@ -34,27 +34,20 @@ f32 D_80280ECC; f32 D_80280ED0[4][4]; Vp D_80280F10[8]; int D_80280F90; -Mtx D_80280F98; +f32 D_80280F98[4][4]; Mtx D_80280FD8; s32 D_80281018; //viewport indx -u8 pad_D_8028101C[0x104]; -u8 D_80281130[0x188]; -OSMesg D_802812B0; -OSMesg D_802812B4; -OSContPad D_802812B8[4]; -OSContPad D_802812D0; -OSMesgQueue D_802812D8; -OSMesgQueue D_802812F0; -u8 pad_D_80281308[0x10]; -OSContStatus D_80281318; -u8 pad_D_80281320[0x8]; -s32 D_80281328; -OSThread D_80281330; -u8 pad_D_802814E0[0x200]; -f32 D_802816E0; -OSMesgQueue D_802816E8; -OSMesg D_80281700[4]; -u8 pad_D_80281710[1]; +u8 pad_8028101C[0x8]; +f32 D_80281028[3]; +f32 D_80281038[3]; +f32 D_80281048[3]; +f32 D_80281058[3]; +f32 D_80281068[3]; +f32 D_80281078[3]; +f32 D_80281088[3]; +f32 D_80281098[4][4]; + + void func_8024F450(void); void func_8024F4AC(void); @@ -125,9 +118,9 @@ void func_8024C7B8(Gfx **gfx, Mtx **mtx){ f32 tmp_f18; gSPViewport((*gfx)++, &D_80280F10[D_80281018]); - tmp_f0 = 2*(f32)D_80276588; - tmp_f2 = 2*(f32)D_8027658C; - guOrtho(*mtx, -tmp_f0, tmp_f0, -tmp_f2, tmp_f2, 1.0f, 20.0f, 1.0f); + tmp_f0 = D_80276588; + tmp_f2 = D_8027658C; + guOrtho(*mtx, -(2*tmp_f0), (2*tmp_f0), -(2*tmp_f2), (2*tmp_f2), 1.0f, 20.0f, 1.0f); gSPMatrix((*gfx)++, OS_PHYSICAL_TO_K0((*mtx)++), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); guTranslate(*mtx, 0.0f, 0.0f, 0.0f); @@ -150,8 +143,8 @@ void func_8024C964(Gfx **gfx, Mtx **mtx, f32 near, f32 far){ far = MIN(D_80275D2C, far); if(D_A00001D8 + 0x53D4FFF0){ - near = D_80277A00; - far = D_80277A04; + near = 750.0f; + far = 1250.0f; } guPerspective(*mtx, &sp5e, D_80275D20, D_80275D24, near, far, 0.5f); @@ -197,7 +190,7 @@ void func_8024CCC4(void){ func_8024CDF8(0.0f, 0.0f, 0.0f); func_8024CE40(0.0f, 0.0f, 0.0f); func_8024CC08(40.0f); - func_8024CE60(1.0f, D_80277A08); + func_8024CE60(1.0f, 10000.0f); func_8024CC5C(); func_8024DDB4(40.0f); mlMtxIdent(); @@ -268,10 +261,10 @@ void func_8024CF10(f32 arg0, f32 arg1, f32 arg2, f32 arg3){ } void func_8024CFD4(void){ - func_80256E24(D_80280ED0[0], D_80280EC0[0], D_80280EC0[1], -89.21774f, 0.0f, D_80277A0C); - func_80256E24(D_80280ED0[1], D_80280EC0[0], D_80280EC0[1], 89.21774f, 0.0f, D_80277A10); - func_80256E24(D_80280ED0[2], D_80280EC0[0], D_80280EC0[1], 0.0f, D_80277A14, D_80277A18); - func_80256E24(D_80280ED0[3], D_80280EC0[0], D_80280EC0[1], 0.0f, D_80277A1C, D_80277A20); + func_80256E24(D_80280ED0[0], D_80280EC0[0], D_80280EC0[1], -89.21774f, 0.0f, 45.168514251708984f); + func_80256E24(D_80280ED0[1], D_80280EC0[0], D_80280EC0[1], 89.21774f, 0.0f, 45.168514251708984f); + func_80256E24(D_80280ED0[2], D_80280EC0[0], D_80280EC0[1], 0.0f, 93.9692611694336f, 34.20201110839844f); + func_80256E24(D_80280ED0[3], D_80280EC0[0], D_80280EC0[1], 0.0f, -93.9692611694336f, 34.20201110839844f); ml_vec3f_normalize(D_80280ED0[0]); ml_vec3f_normalize(D_80280ED0[1]); ml_vec3f_normalize(D_80280ED0[2]); @@ -321,255 +314,139 @@ void func_8024D1EC(f32 arg0[4], f32 arg1[4], f32 arg2[4], f32 arg3[4]){ #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024D9B0.s") -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DB50.s") +bool func_8024DB50(f32 arg0[3], f32 arg1) { + f32 sp3C[3]; + s32 i; -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DC04.s") + sp3C[0] = arg0[0] - D_80280EB0[0]; + sp3C[1] = arg0[1] - D_80280EB0[1]; + sp3C[2] = arg0[2] - D_80280EB0[2]; + for(i = 0; i < 4; i++){ + if(arg1 <= ml_vec3f_dot_product(sp3C, D_80280ED0[i])){ + return FALSE; + } + } + return TRUE; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DD0C.s") + +bool func_8024DC04(f32 arg0, f32 arg1, f32 arg2) { + if ( + (((D_80280ED0[0][0] * arg0) + (D_80280ED0[0][1] * arg1) + (D_80280ED0[0][2] * arg2) + D_80280ED0[0][3]) <= 0.0f) + && (((D_80280ED0[1][0] * arg0) + (D_80280ED0[1][1] * arg1) + (D_80280ED0[1][2] * arg2) + D_80280ED0[1][3]) <= 0.0f) + && (((D_80280ED0[2][0] * arg0) + (D_80280ED0[2][1] * arg1) + (D_80280ED0[2][2] * arg2) + D_80280ED0[2][3]) <= 0.0f) + && (((D_80280ED0[3][0] * arg0) + (D_80280ED0[3][1] * arg1) + (D_80280ED0[3][2] * arg2) + D_80280ED0[3][3]) <= 0.0f) + ) { + return TRUE; + } + return FALSE; +} + + +bool func_8024DD0C(f32 arg0[3]){ + return func_8024DC04(arg0[0], arg0[1], arg0[2]); +} #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DD34.s") -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DD90.s") +Mtx *func_8024DD90(void){ + return &D_80280F98; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DD9C.s") +Mtx *func_8024DD9C(void){ + return &D_80280FD8; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DDA8.s") +f32 func_8024DDA8(void){ + return D_80275D20; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DDB4.s") +void func_8024DDB4(f32 arg0){ + D_80275D20 = arg0; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DDC0.s") +f32 func_8024DDC0(void){ + return D_80275D24; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DDCC.s") +f32 func_8024DDCC(void){ + return D_80275D28; +} f32 func_8024DDD8(s32 arg0, f32 arg1){ - return mlNormalizeAngle((D_80280EC0[1] + arg1) + D_80277A30); + return mlNormalizeAngle((D_80280EC0[1] + arg1) + 90.0); } #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DE1C.s") + +#ifndef NONMATCHING #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E030.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E258.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E2FC.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E3A8.s") - -#ifndef CORE2_DATA_CRC2 - #define CORE2_DATA_CRC2 0 -#endif - -extern s32 D_803727F4 = CORE2_DATA_CRC2; - -extern s32 D_80276574; - -extern f32 D_80277A70; -extern f32 D_80277A74; - - -extern struct { - u8 pad0[4]; - s32 unk4; - u8 pad8[4]; - s32 unkC; -} D_80379B90; - -f32 func_8024E420(s32 arg0, s32 arg1, s32 arg2) { - f32 phi_f2; - - phi_f2 = D_80277A70; - if ((D_80379B90.unk4 != D_803727F4) || (D_80379B90.unkC != D_80276574)) { - phi_f2 = D_80277A74; - } - if (arg0 > 0) { - arg0 = (arg2 < arg0) ? arg2 : (arg0 < arg1) ? arg1 : arg0; - arg0 = (s32) ((arg0 - arg1) * 0x50) / (s32) (arg2 - arg1); - } else { - if (arg0 < 0) { - arg0 = (arg0 < -arg2) ? -arg2 : (-arg1 < arg0) ? -arg1 : arg0; - arg0 = (s32) ((arg0 + arg1) * 0x50) / (s32) (arg2 - arg1); - } - } - return phi_f2 *= arg0; -} - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E55C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E5A8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E5E8.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E60C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E640.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E668.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E67C.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E698.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E6E0.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E71C.s") - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024E7C8.s") #else -void func_8024E7C8(void){ - u32 s0; - s32 sp5C; +bool func_8024E030(f32 arg0[3], f32 *arg1) { + f32 sp34[3]; + f32 sp28; + f32 sp24; + f32 temp_f0; + f32 temp_f12; + f32 temp_f12_2; + f32 temp_f16; + f32 temp_f2; + f32 temp_f2_2; - if(func_8023E000() == 3) - func_802E4384(); - - osSetThreadPri(NULL, 0x29); - D_802812D0.stick_x = D_802812B8[0].stick_x; - D_802812D0.stick_y = D_802812B8[0].stick_y; - D_802812D0.button = D_802812B8[0].button; - if( getGameMode() == GAME_MODE_6_FILE_PLAYBACK - || getGameMode() == GAME_MODE_7_ATTRACT_DEMO - || getGameMode() == GAME_MODE_8_BOTTLES_BONUS - || getGameMode() == GAME_MODE_A_SNS_PICTURE - || getGameMode() == GAME_MODE_9_BANJO_AND_KAZOOIE - ){ - s0 = START_BUTTON; - if(gctransition_8030BD98()){ - D_802816E0 += time_getDelta(); - } - if(D_802816E0 < 1.0 || getGameMode() == GAME_MODE_9_BANJO_AND_KAZOOIE){ - s0 = 0; - } - - if(D_802812D0.button & s0 || demo_readInput(D_802812B8, &sp5C) < 1){ - if(D_802812D0.button & s0){ - func_803204E4(0x64, 1); - } - else{ - func_803204E4(0x63, 1); - } - func_8033DD90(); - }//L8024E944 - }//L8024E94C + sp28 = (D_80275D20 * M_PI) / 360.0; + sp34[0] = arg0[0] - D_80280EB0[0]; + sp34[1] = arg0[1] - D_80280EB0[1]; + sp34[2] = arg0[2] - D_80280EB0[2]; + ml_vec3f_yaw_rotate_copy(sp34, sp34, -D_80280EC0[1]); + ml_vec3f_pitch_rotate_copy(&sp34, &sp34, -D_80280EC0[0]); + if (-D_80275D28 <= sp34[2]) { + return FALSE; + } + temp_f2 = gu_sqrtf((sp34[1] * sp34[1]) + (sp34[2] * sp34[2]))*sinf(sp28); + arg1[0] = (f32) ((1 + (sp34[0] / (((f32)D_80276588 / (f32) D_8027658C) * temp_f2))) * ((f32)D_80276588 / 2)); + arg1[1] = (f32) ((1 - (sp34[1] / temp_f2)) * ((f32) D_8027658C / 2)); + if ((arg1[0] < -(f32)D_80276588) || (((f32)D_80276588 * 2) < arg1[0])) { + return 0; + } + if ((arg1[1] < -(f32)D_8027658C) || (((f32)D_8027658C * 2) < arg1[1])) { + return 0; + } + return 1; } #endif -void func_8024EF74(void){ - func_8024F35C(0); - if(!D_80281318.errno) - osContGetReadData(D_802812B8); -} - -#ifndef NONMATCHING -void func_8024EFB0(void *); -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024EFB0.s") -#else -void func_8024EFB0(void *arg0){ - while(1){ - osRecvMesg(&D_802812D8, &D_802812F0, 1); - if(D_80281328 == TRUE){ - func_8024EF74(); - } - else{ - osSendMesg(&D_802812D8, 0, 0); +void func_8024E258(void){ + s32 i, j; + func_8024C5CC(D_80281028); + func_8024C764(D_80281038); + func_8024D1EC(D_80281048, D_80281058, D_80281068, D_80281078); + func_8024C5A8(D_80281088); + for(i = 0; i < 4; i++){ + for(j = 0; j < 4; j++){ + D_80281098[i][j] = D_80280F98[i][j]; } } } -#endif -void func_8024F05C(void){ - osCreateMesgQueue(&D_802812D8, &D_802812B0, 1); - osCreateMesgQueue(&D_802812F0, &D_802812B4, 1); - osCreateThread(&D_80281330, 7, func_8024EFB0, NULL, &D_802816E0, 0x28); - osSetEventMesg(OS_EVENT_SI, &D_802812D8, &D_802812B0); - osContInit(&D_802812D8, &D_80281130, &D_80281318); - osContSetCh(1); - func_8024F224(); - func_802476DC(); - osStartThread(&D_80281330); -} - -int func_8024F12C(void){ - return D_80281318.errno ? 1 : 0; -} - -void func_8024F150(void){ - if(func_8024F12C()) - func_802DD008(0,0); -} - -void func_8024F180(void){ - if(func_8024F12C()) - func_802DD040(0,0); -} - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024F1B0.s") -#else -void func_8024F1B0(void){ - if(D_80281328 == 0){ - func_8024F35C(1); - osContStartReadData(&D_802812D8); +void func_8024E2FC(void){ + s32 i, j; + func_8024CD88(D_80281028); + func_8024CE18(D_80281038); + func_8024D2B0(D_80281048, D_80281058, D_80281068, D_80281078); + ml_vec3f_copy(D_80280EA0, D_80281088); + for(i = 0; i < 4; i++){ + for(j = 0; j < 4; j++){ + D_80280F98[i][j] = D_80281098[i][j]; + } } } -#endif -void func_8024F1F0(void){ - osRecvMesg(&D_802812D8, NULL, 1); - func_8024E7C8(); +void func_8024E3A8(f32 arg0[3], f32 arg1){ + f32 sp1C[3]; + ml_vec3f_diff_copy(sp1C, D_80280EB0, arg0); + ml_vec3f_set_length_copy(sp1C, sp1C, arg1); + arg0[0] += sp1C[0]; + arg0[1] += sp1C[1]; + arg0[2] += sp1C[2]; } - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024F224.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024F2E4.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024F328.s") - -OSMesgQueue * func_8024F344(void){ - return &D_802812F0; -} - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024F350.s") - -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024F35C.s") -#else -void func_8024F35C(int arg0){ - if(!arg0) - func_8024F4AC(); - else - func_8024F450(); - - if(arg0 || D_802816E8.validCount == 1) - D_80281328[0] = arg0; - -} -#endif - -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024F3B4.s") - -int func_8024F3C4(int arg0){ - return D_802812B8[arg0].button + D_802812B8[arg0].stick_x + D_802812B8[arg0].stick_y; -} - -OSContPad *func_8024F3F4(void){ - return &D_802812D0; -} - -/* initilizes D_802816E8 message queue */ -void func_8024F400(void){ - D_80275D38 = TRUE; - osCreateMesgQueue(&D_802816E8, &D_80281700, 5); - osSendMesg(&D_802816E8, 0, 0); -} - -void func_8024F450(void){ - if(!D_80275D38) - func_8024F400(); - osRecvMesg(&D_802816E8, 0, 1); - osSetEventMesg(OS_EVENT_SI, &D_802812D8, &D_802812B0); -} - -void func_8024F4AC(void){ - osSendMesg(&D_802816E8, 0, 0); -} \ No newline at end of file diff --git a/src/core2/code_560F0.c b/src/core2/code_560F0.c index 2818b07c..deed1901 100644 --- a/src/core2/code_560F0.c +++ b/src/core2/code_560F0.c @@ -142,7 +142,7 @@ void func_802DD080(Gfx **gfx, Mtx **mtx) { } void func_802DD158(Gfx **gfx, Mtx** mtx){ - func_8024E2FC(gfx, mtx); + func_8024E2FC(); func_8024C904(gfx, mtx); } diff --git a/src/core2/gc/pauseMenu.c b/src/core2/gc/pauseMenu.c index 3a9a9926..3b259f1c 100644 --- a/src/core2/gc/pauseMenu.c +++ b/src/core2/gc/pauseMenu.c @@ -36,13 +36,12 @@ void gczoombox_update(gczoombox_t *); void func_8024E6E0(s32, void *); void func_8024E60C(s32, void *); void func_8024E71C(s32, void *); -void func_8024E55C(s32, void *); s32 getGameMode(void); void gczoombox_highlight(gczoombox_t *, int); void func_802DC5B8(void); void func_802DC560(s32, s32); -s32 func_8024E67C(enum button_e); +s32 func_8024E67C(s32 controller_index); bool func_803188B4(gczoombox_t*); bool func_803183A4(gczoombox_t*, char *); bool func_8031FF1C(enum bkprog_e); @@ -912,7 +911,7 @@ s32 gcPauseMenu_update(void){ gcPauseMenu_setState(2); } } - if(func_8024E67C(BUTTON_START) == 1){ + if(func_8024E67C(0) == 1){ gcPauseMenu_setState(6); } break; @@ -926,7 +925,7 @@ s32 gcPauseMenu_update(void){ func_802FACA4(ITEM_16_LIFE); D_80383010.unk70_30 = 0; } - if(func_8024E67C(BUTTON_START) == 1){ + if(func_8024E67C(0) == 1){ gcPauseMenu_setState(6); }else if(face_button[FACE_BUTTON(BUTTON_A)] == 1){ switch(D_80383010.selection){ @@ -1042,7 +1041,7 @@ s32 gcPauseMenu_update(void){ if(D_8036C4E0[D_80383010.selection].unkF = func_803183A4(D_80383010.zoombox[D_80383010.selection], (D_80383010.unk3_6)? "ARE YOU SURE?" : "A - YES, B - NO")) D_80383010.unkC = 0.0; }//L80313AF4 - if(func_8024E67C(BUTTON_START) == 1){ + if(func_8024E67C(0) == 1){ gcPauseMenu_setState(6); }else if(face_button[FACE_BUTTON(BUTTON_B)] == 1){ D_80383010.unk4 = (D_80383010.return_to_lair_disabled)? 3 : 4; @@ -1079,7 +1078,7 @@ s32 gcPauseMenu_update(void){ gcpausemenu_printTotalsHeader(D_80383010.selection); gcpausemenu_80312FD0(1); gcpausemenu_updateBButtonAndJoystickSprites(); - if(func_8024E67C(BUTTON_START) == 1){ + if(func_8024E67C(0) == 1){ D_80383010.unk1 = 3; gcPauseMenu_setState(0xA); }else if(face_button[FACE_BUTTON(BUTTON_B)] == 1){ @@ -1159,7 +1158,7 @@ s32 gcPauseMenu_update(void){ case 0x10: gcpausemenu_printTotalsHeader(D_80383010.selection); gcpausemenu_updateBButtonAndJoystickSprites(); - if(func_8024E67C(BUTTON_START) == 1){ + if(func_8024E67C(0) == 1){ D_80383010.unk1 = 3; gcPauseMenu_setState(0x11); }//L80313EFC diff --git a/subyaml/core1.us.v10.yaml b/subyaml/core1.us.v10.yaml index 3a63757e..bb080f37 100644 --- a/subyaml/core1.us.v10.yaml +++ b/subyaml/core1.us.v10.yaml @@ -44,8 +44,9 @@ segments: - [0x8C50, c, code_8C50] #DONE - [0x9D30, c, code_9D30] - [0xCE60, c, done/code_CE60] #DONE - - [0xE360, c, code_E360] + - [0xE360, c, code_E360] #DONE - [0xEAF0, c, code_EAF0] + - [0x10A00, c,code_10A00] - [0x11AC0, c, code_11AC0] - [0x12F10, c, code_12F10] #DONE - [0x13640, c, code_13640] #DONE @@ -251,6 +252,9 @@ segments: - [0x38030, bin, data_38030] - [0x381F0, bin, data_381F0] # .data, done/code_CE60] - [0x38260, bin, data_38260] + - [0x38320, .data, code_11AC0] + - [0x388B0, .data, code_136D0] + - [0x38B50, bin, data_38B50] - [0x38BA0, .data, code_18310] - [0x39290, bin, data_39290] - [0x39470, .data, done/audio/n_drvrNew] @@ -280,8 +284,10 @@ segments: - [0x39CE0, bin, data_39CE0] # .rodata, code_9D30] - [0x39D00, .rodata, done/code_CE60] - [0x39FD0, .rodata, code_EAF0] - - [0x39FE0, bin, data_39FD0] # .rodata, code_EAF0] #continued - - [0x3A760, bin, data_3A760] # .rodata, code_11AC0] + - [0x3A050, .rodata, code_10A00] + - [0x3A760, .rodata, code_11AC0] + - [0x3A770, bin, data_3A770] + - [0x3A780, .rodata, code_136D0] - [0x3A800, bin, data_3A800] # .rodata, code_13990] - [0x3A820, .rodata, code_18350] - [0x3A920, .rodata, code_1BE90] @@ -326,6 +332,7 @@ segments: - [0x3c710, .bss, done/code_CE60] - [0x3c710, .bss, code_E360] - [0x3c710, .bss, code_EAF0] + - [0x3c710, .bss, code_10A00] - [0x3c710, .bss, code_11AC0] - [0x3c710, .bss, code_12F10] - [0x3c710, .bss, code_13640]