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]