diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg
index ee95b1c9..13bb3ebd 100644
--- a/progress/progress_core1.svg
+++ b/progress/progress_core1.svg
@@ -9,7 +9,7 @@
-
+
@@ -17,7 +17,7 @@
core1
- 71.6821%
- 71.6821%
+ 72.1884%
+ 72.1884%
\ No newline at end of file
diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg
index 7e0bc70e..d6368f96 100644
--- a/progress/progress_core2.svg
+++ b/progress/progress_core2.svg
@@ -9,7 +9,7 @@
-
+
@@ -17,7 +17,7 @@
core2
- 83.4994%
- 83.4994%
+ 83.9966%
+ 83.9966%
\ No newline at end of file
diff --git a/progress/progress_total.svg b/progress/progress_total.svg
index fad5c8eb..179ac3eb 100644
--- a/progress/progress_total.svg
+++ b/progress/progress_total.svg
@@ -9,7 +9,7 @@
-
+
@@ -17,7 +17,7 @@
Banjo-Kazooie (us.v10)
- 85.5902%
- 85.5902%
+ 85.9490%
+ 85.9490%
\ No newline at end of file
diff --git a/src/core1/code_9D30.c b/src/core1/code_9D30.c
index 3d931e7f..921a09bf 100644
--- a/src/core1/code_9D30.c
+++ b/src/core1/code_9D30.c
@@ -12,17 +12,30 @@ void draw_prim_rect(s32 x, s32 y, s32 w, s32 h);
void set_prim_color(s32 r, s32 g, s32 b);
void func_8024A85C(s32 buffer_indx);
-extern s32 D_80276588; //framebuffer width
extern u16 D_803A5D00[2][0xF660]; //framebuffer
+extern s32 D_80276588; //framebuffer width
+extern s32 D_8027658C; //framebuffer height
+
+/* .data */
+extern u8 D_80275A50[][3];
+extern s32 D_80275A68;
+extern s32 D_80275A6C;
+extern s32 D_80275A70;
+extern u8 D_80275A74[];
+extern u32 D_80275A7C[][2];
extern s16 D_80275BBC;
extern s16 D_80275BC4;
+extern s16 D_80275BC8;
+
extern s16 D_80275BCC;
extern s16 D_80275BD0;
extern s16 D_80275BD4;
+extern u8 D_80275BE0;
+extern s32 D_80275BE4;
/* .bss */
s32 D_802806E0;
@@ -30,29 +43,142 @@ s32 D_802806E4;
s32 D_802806E8;
s32 D_802806EC;
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247750.s")
+void func_80247750(s32 r, s32 g, s32 b){
+ D_80275A68 = r;
+ D_80275A6C = g;
+ D_80275A70 = b;
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_8024776C.s")
+void func_8024776C(s32 x, s32 y) {
+ s32 rgba16;
+ if( ((x >= 0) && (x < D_80276588))
+ && ((y >= 0) && (y < D_8027658C))
+ ) {
+ D_803A5D00[0][x + y*D_80276588] = _SHIFTL(D_80275A68 >> 3, 11, 5) | _SHIFTL(D_80275A6C >> 3, 6, 5) | _SHIFTL(D_80275A70 >> 3, 1, 5) | _SHIFTL(1, 0, 1);
+ D_803A5D00[1][x + y*D_80276588] = _SHIFTL(D_80275A68 >> 3, 11, 5) | _SHIFTL(D_80275A6C >> 3, 6, 5) | _SHIFTL(D_80275A70 >> 3, 1, 5) | _SHIFTL(1, 0, 1);
+
+ }
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247818.s")
+void func_80247818(s32 x, s32 y, s32 w, s32 h) {
+ s32 iy;
+ s32 var_s1;
+ s32 ix;
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_802478C0.s")
+ for(ix = 0; ix < w; ix++){
+ for(iy = 0; iy < h; iy++){
+ func_8024776C(x + ix, y + iy);
+ }
+ }
+ osWriteBackDCacheAll();
+}
+
+void func_802478C0(s32 r, s32 g, s32 b) {
+ func_80247750(r, g, b);
+ func_80247818((D_80276588 - 128) / 2, (D_8027658C - 100) / 2, 128, 100);
+}
void func_8024792C(void){}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247934.s")
+void func_80247934(void) {
+ s32 var_s0;
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247978.s")
+ for(var_s0 = 0; var_s0 < 2000000; var_s0++){
+ func_8024792C();
+ }
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_802479E4.s")
+void func_80247978(s32 arg0) {
+ do{
+ func_802478C0(D_80275A50[arg0][0], D_80275A50[arg0][1], D_80275A50[arg0][2]);
+ func_80247934();
+ func_802478C0(0, 0, 0);
+ func_80247934();
+ }
+ while(1);
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247A40.s")
+void func_802479E4(s32 arg0) {
+ func_802478C0(D_80275A50[arg0][0], D_80275A50[arg0][1], D_80275A50[arg0][2]);
+ func_80247934();
+ func_802478C0(0, 0, 0);
+ func_80247934();
+}
+void func_80247A40(s32 arg0) {
+ func_802478C0(D_80275A50[arg0][0], D_80275A50[arg0][1], D_80275A50[arg0][2]);
+}
+
+#ifndef NONMATCHING
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247A7C.s")
+#else
+void func_80247A7C(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 r, s32 g, s32 b) {
+ s32 var_s3;
+ s32 sp48;
+ u32 sp44;
+ u32 sp40;
+ s32 temp_lo;
+ s32 temp_s1;
+ s32 temp_t8;
+ s32 var_s0;
+ u32 temp_t4;
+ u32 var_s4;
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247C20.s")
+ var_s4 = 0x10000000;
+ sp44 = D_80275A7C[arg1][0];
+ sp40 = D_80275A7C[arg1][1];
+ for(sp48 = 0; sp48 != 5; sp48++){
+ temp_lo = sp48 * arg2;
+ temp_s1 = arg2 + arg3 + arg3;
+ for(var_s3 = 0; var_s3 != sp44; var_s3++){
+ var_s4 >>= 1;
+ if (sp40 & var_s4) {
+ func_80247750(r, g, b);
+ func_80247818((D_80275BC4 + arg2*var_s3) - arg3, (D_80275BC8 + temp_lo) - arg3, temp_s1, temp_s1);
+ } else {
+ if (arg4 != 0) {
+ func_80247750(0, 0, 0);
+ }
+ func_80247818((D_80275BC4 + arg2*var_s3) - arg3, (D_80275BC8 + temp_lo) - arg3, temp_s1, temp_s1);
+ }
+ }
+ }
+ if (arg3 == 0) {
+ D_80275BC4 += (sp44 * arg2) + 2;
+ }
+}
+#endif
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247CEC.s")
+
+void func_80247C20(void) {
+ s16 *var_v0;
+ s16 *var_v1;
+ s32 temp_lo;
+ void *temp_a0;
+ s32 i;
+
+ if (D_80275BE4 == 0) {
+ D_80275BE4 = func_8023DB5C();
+ return;
+ }
+ if (func_8023DB5C() != D_80275BE4) {
+ D_80275BE0 = FALSE;
+ D_80275BE4 = func_8023DB5C();
+ }
+
+ if (D_80275BE0) {
+ for(i = 0; i < D_80276588 * D_8027658C; i++){
+ D_803A5D00[0][i] = 0;
+ D_803A5D00[1][i] = 0;
+ }
+ osWriteBackDCacheAll();
+ }
+}
+
+void func_80247CEC(s32 arg0, s32 arg1, s32 arg2) {
+ func_80247A7C(arg0, arg1, arg2, 1, 1, 0, 0, 0);
+ func_80247A7C(arg0, arg1, arg2, 0, 1, D_80275A50[D_80275A74[arg0]][0], D_80275A50[D_80275A74[arg0]][1], D_80275A50[D_80275A74[arg0]][2]);
+}
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80247D80.s")
diff --git a/src/core2/code_3BB80.c b/src/core2/code_3BB80.c
index cdadd0cc..a86d1790 100644
--- a/src/core2/code_3BB80.c
+++ b/src/core2/code_3BB80.c
@@ -578,7 +578,7 @@ Actor *func_802C4260(enum actor_e actor_id, s32 x, s32 y, s32 z, s32 yaw){
}
-s32 func_802C42B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
+Actor *func_802C42B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
s32 sp1C[3];
sp1C[0] = reinterpret_cast(s32, arg1);
sp1C[1] = reinterpret_cast(s32, arg2);
@@ -586,7 +586,7 @@ s32 func_802C42B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
return func_802C8F88(reinterpret_cast(s32, arg0), sp1C);
}
-s32 func_802C42F0(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
+Actor * func_802C42F0(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
s32 sp1C[3];
sp1C[0] = arg1;
sp1C[1] = arg2;
diff --git a/src/core2/code_41FB0.c b/src/core2/code_41FB0.c
index d6bbaf26..ce4ece49 100644
--- a/src/core2/code_41FB0.c
+++ b/src/core2/code_41FB0.c
@@ -44,23 +44,43 @@ typedef struct {
} struct41FB0s_1;
/* .data */
+enum core2_41FB0_e{
+ CORE2_41FB0_0_MM_HUT_NOTES,
+ CORE2_41FB0_1_MM_HUT_EGGS,
+ CORE2_41FB0_2_MM_HUT_GRUBLIN,
+ CORE2_41FB0_3_MM_HUT_JINJO,
+ CORE2_41FB0_4_MM_HUT_JIGGY,
+
+ CORE2_41FB0_6_MM_HUT_EXTRA_LIFE = 0x6,
+
+
+ CORE2_41FB0_A_BGS_HUT_JUMP_PAD = 0xA,
+ CORE2_41FB0_B_BGS_HUT_NOTES,
+ CORE2_41FB0_C_BGS_HUT_JIGGY,
+
+ CORE2_41FB0_E_YUMYUM_EGG = 0xe,
+ CORE2_41FB0_F_YUMYUM_RED_FEATHER,
+
+};
+
+// #define 41FB0_FLAG_SET_YAW 0x0020
struct41FB0s D_80366460[] = {
- {0x0021, ACTOR_51_MUSIC_NOTE, 5, SFX_3E9_UNKNOWN, 1, 16000, 125.0f, 25.0f, 725.0f, 125.0f, 125.0f, 25.0f, 0.6f, 0.0f},
- {0x0021, ACTOR_52_BLUE_EGG, 5, SFX_21_EGG_BOUNCE_1, 1, 16000, 100.0f, 50.0f, 500.0f, 250.0f, 100.0f, 50.0f, 0.6f, 0.0f},
- {0x0021, ACTOR_6_GRUBLIN, 1, SFX_8_BANJO_LANDING_04, 1, 20000, 0.0f, 0.0f, 550.0f, 250.0f, 200.0f, 0.0f, 0.6f, 0.0f},
- {0x0021, ACTOR_62_JINJO_GREEN, 1, SFX_8_BANJO_LANDING_04, 1, 20000, 100.0f, 50.0f, 500.0f, 250.0f, 100.0f, 50.0f, 0.6f, 0.0f},
- {0x0021, ACTOR_46_JIGGY, 1, SFX_3E9_UNKNOWN, 1, 16000, 100.0f, 50.0f, 500.0f, 250.0f, 100.0f, 50.0f, 0.6f, 0.0f},
+ /*MM HUT 1*/ {0x0021, ACTOR_51_MUSIC_NOTE, 5, SFX_3E9_UNKNOWN, 1, 16000, 125.0f, 25.0f, 725.0f, 125.0f, 125.0f, 25.0f, 0.6f, 0.0f},
+ /*MM HUT 2*/ {0x0021, ACTOR_52_BLUE_EGG, 5, SFX_21_EGG_BOUNCE_1, 1, 16000, 100.0f, 50.0f, 500.0f, 250.0f, 100.0f, 50.0f, 0.6f, 0.0f},
+ /*MM HUT 3*/ {0x0021, ACTOR_6_GRUBLIN, 1, SFX_8_BANJO_LANDING_04, 1, 20000, 0.0f, 0.0f, 550.0f, 250.0f, 200.0f, 0.0f, 0.6f, 0.0f},
+ /*MM HUT 4*/ {0x0021, ACTOR_62_JINJO_GREEN, 1, SFX_8_BANJO_LANDING_04, 1, 20000, 100.0f, 50.0f, 500.0f, 250.0f, 100.0f, 50.0f, 0.6f, 0.0f},
+ /*MM HUT 6*/ {0x0021, ACTOR_46_JIGGY, 1, SFX_3E9_UNKNOWN, 1, 16000, 100.0f, 50.0f, 500.0f, 250.0f, 100.0f, 50.0f, 0.6f, 0.0f},
{0x0001, ACTOR_50_HONEYCOMB, 3, SFX_3E9_UNKNOWN, 1, 16000, 50.0f, 150.0f, 500.0f, 250.0f, 50.0f, 150.0f, 0.6f, 0.0f},
- {0x0021, ACTOR_49_EXTRA_LIFE, 1, SFX_3E9_UNKNOWN, 1, 16000, 100.0f, 50.0f, 500.0f, 250.0f, 100.0f, 50.0f, 0.6f, 0.0f},
+ /*MM HUT 5*/ {0x0021, ACTOR_49_EXTRA_LIFE, 1, SFX_3E9_UNKNOWN, 1, 16000, 100.0f, 50.0f, 500.0f, 250.0f, 100.0f, 50.0f, 0.6f, 0.0f},
{0x0001, ACTOR_46_JIGGY, 1, SFX_3E9_UNKNOWN, 1, 16000, 0.0f, 0.0f, 1000.0f, 0.0f, 0.0f, 0.0f, 0.6f, 0.0f},
{0x0005, ACTOR_46_JIGGY, 1, SFX_3E9_UNKNOWN, 1, 16000, 90.0f, 0.0f, 930.0f, 0.0f, 100.0f, 0.0f, 0.6f, 0.0f},
{0x0049, ACTOR_46_JIGGY, 1, SFX_3E9_UNKNOWN, 1, 16000, 0.0f, 0.0f, 1000.0f, 0.0f, 300.0f, 0.0f, 0.5f, 0.0f},
- {0x002D, ACTOR_B_SHOCKSPRING_PAD, 1, 0, 1, 16000, 0.0f, 0.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.2f, 315.0f},
- {0x0005, ACTOR_51_MUSIC_NOTE, 5, SFX_3E9_UNKNOWN, 1, 16000, 75.0f, 0.0f, 725.0f, 0.0f, 75.0f, 0.0f, 0.6f, 0.0f},
- {0x0005, ACTOR_46_JIGGY, 1, SFX_3E9_UNKNOWN, 1, 16000, 0.0f, 0.0f, 1000.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f},
+ /*BGS HUT 1,2,4,5 */{0x002D, ACTOR_B_SHOCKSPRING_PAD, 1, 0, 1, 16000, 0.0f, 0.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.2f, 315.0f},
+ /*BGS HUT 3 */ {0x0005, ACTOR_51_MUSIC_NOTE, 5, SFX_3E9_UNKNOWN, 1, 16000, 75.0f, 0.0f, 725.0f, 0.0f, 75.0f, 0.0f, 0.6f, 0.0f},
+ /*BGS HUT 4 */ {0x0005, ACTOR_46_JIGGY, 1, SFX_3E9_UNKNOWN, 1, 16000, 0.0f, 0.0f, 1000.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f},
{0x0009, ACTOR_47_EMPTY_HONEYCOMB, 1, SFX_3E9_UNKNOWN, 1, 16000, 0.0f, 0.0f, 200.0f, 0.0f, 300.0f, 0.0f, 0.6f, 0.0f},
- {0x0001, ACTOR_52_BLUE_EGG, 1, SFX_21_EGG_BOUNCE_1, 1, 16000, 0.0f, 350.0f, 500.0f, 500.0f, 0.0f, 350.0f, 0.6f, 0.0f},
- {0x0001, ACTOR_129_RED_FEATHER, 1, SFX_21_EGG_BOUNCE_1, 1, 16000, 0.0f, 350.0f, 500.0f, 500.0f, 0.0f, 350.0f, 0.6f, 0.0f},
+ /*YUM YUM EGG*/ {0x0001, ACTOR_52_BLUE_EGG, 1, SFX_21_EGG_BOUNCE_1, 1, 16000, 0.0f, 350.0f, 500.0f, 500.0f, 0.0f, 350.0f, 0.6f, 0.0f},
+ /*YUM YUM FEATHER*/ {0x0001, ACTOR_129_RED_FEATHER, 1, SFX_21_EGG_BOUNCE_1, 1, 16000, 0.0f, 350.0f, 500.0f, 500.0f, 0.0f, 350.0f, 0.6f, 0.0f},
{0x0005, ACTOR_46_JIGGY, 1, 0, 0, 0, 0.0f, 0.0f, 100.0f, 0.0f, 0.0f, 0.0f, 0.75f, 0.0f},
{0x0005, 0x06A, 1, 0, 0, 0, 0.0f, 0.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.6f, 0.0f},
{0x0009, ACTOR_46_JIGGY, 1, SFX_3E9_UNKNOWN, 1, 16000, 0.0f, 0.0f, 650.0f, 0.0f, 950.0f, 0.0f, 0.6f, 0.0f},
@@ -76,7 +96,7 @@ struct41FB0s D_80366460[] = {
{0x00A1, ACTOR_50_HONEYCOMB, 1, SFX_8_BANJO_LANDING_04, 1, 20000, 550.0f, 0.0f, 450.0f, 0.0f, 0.0f, 0.0f, 0.6f, 0.0f},
{0x00A1, ACTOR_50_HONEYCOMB, 1, SFX_8_BANJO_LANDING_04, 1, 20000, 650.0f, 0.0f, 500.0f, 0.0f, 0.0f, 0.0f, 0.6f, 0.0f},
{0x0021, ACTOR_46_JIGGY, 1, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f},
- {0x0025, ACTOR_47_EMPTY_HONEYCOMB, 1, SFX_3E9_UNKNOWN, 1, 18000, 0.0f, 0.0f, 750.0f, 500.0f, 0.0f, 0.0f, 0.6f, 0.0f},
+ /* SM QUARRIES & VEGGIES*/ {0x0025, ACTOR_47_EMPTY_HONEYCOMB, 1, SFX_3E9_UNKNOWN, 1, 18000, 0.0f, 0.0f, 750.0f, 500.0f, 0.0f, 0.0f, 0.6f, 0.0f},
{0x0129, 0x352, 1, SFX_3F2_UNKNOWN, 1, 16000, 0.0f, 0.0f, 2500.0f, 0.0f, 0.0f, 0.0f, 0.4f, 0.0f},
{0x0081, ACTOR_3A0_ICECUBE_B, 1, SFX_116_DEAF_RUSTLING, 1, 32000, 220.0f, 100.0f, 350.0f, 200.0f, 220.0f, 100.0f, 0.6f, 0.0f},
{0x02A1, ACTOR_50_HONEYCOMB, 1, SFX_8_BANJO_LANDING_04, 1, 20000, 250.0f, 0.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f},
diff --git a/src/core2/code_5DBC0.c b/src/core2/code_5DBC0.c
index 11b3c041..2ccf3c19 100644
--- a/src/core2/code_5DBC0.c
+++ b/src/core2/code_5DBC0.c
@@ -25,8 +25,10 @@ typedef struct {
s32 unk8;
u16 unkC;
u8 unkE;
- u8 padF[1];
- u8 unk10[0xC];
+ u8 unkF[3];
+ u8 unk12[3];
+ u8 pad15[0x3];
+ s32 unk18;
}struct5DBC0_1s;
typedef struct {
@@ -42,10 +44,19 @@ typedef struct {
}struct5DBC0s;
extern u8 D_80368830[3] = {0,0,0};
+extern u8 D_80368834[3];
+extern u8 D_80368838[3];
+extern u8 D_8036883C[3];
+extern u8 D_80368840[3];
+extern u8 D_80368844[3];
+extern u8 D_80368848[3];
/* .bss */
struct5DBC0s * D_8037E900;
+/* public */
+void func_802E6820(s32 arg0);
+
/* .code */
struct5DBC0s *func_802E4B50(void){
u8 sp24[3] = D_80368830;
@@ -64,7 +75,7 @@ struct5DBC0s *func_802E4B50(void){
}
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E4C0C.s")
-// s32 func_802E4C0C(struct5DBC0_3s * arg0, u32 arg1){
+// s32 func_802E4C0C(struct5DBC0_2s * arg0, u32 arg1){
// u32 i, v0;
// for(i = arg1; i > 0; i--){
// v0 = i - 1;
@@ -163,7 +174,23 @@ s32 func_802E4F98(char *arg0) {
return sp1C;
}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E502C.s")
+void func_802E502C(s32 arg0, s32 arg1, s32 arg2, char *arg3, u8 arg4[3]) {
+ s32 sp24;
+
+ sp24 = D_8037E900->unkC++;
+ if (D_8037E900->unkC >= 2) {
+ D_8037E900->unk0 = realloc(D_8037E900->unk0, (D_8037E900->unkC * 0x1C) + 0x1C);
+ }
+ D_8037E900->unk0[sp24].unk0 = arg0;
+ D_8037E900->unk0[sp24].unk4 = arg1;
+ D_8037E900->unk0[sp24].unkE = arg2;
+ D_8037E900->unk0[sp24].unkC = func_802E4F98(arg3);
+ D_8037E900->unk0[sp24].unk8 = D_8037E900->flags;
+ D_8037E900->unk0[sp24].unkF[0] = arg4[0];
+ D_8037E900->unk0[sp24].unkF[1] = arg4[1];
+ D_8037E900->unk0[sp24].unkF[2] = arg4[2];
+ D_8037E900->unk0[sp24].unk18 = -1;
+}
void func_802E5188(void){
D_8037E900->unkC = 0;
@@ -199,9 +226,97 @@ s32 func_802E51A4(char *str, s32 arg1, s32 start, u32 flags) {
}
#endif
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E533C.s")
+void func_802E533C(struct5DBC0_1s *arg0, char arg1, s32 *arg2, s32 *arg3, Gfx **gfx) {
+ s32 timg;
+ BKSpriteTextureBlock *chunk;
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E57E0.s")
+ if (arg1 == ' ') {
+ *arg2 += D_8037E900->unk4[arg0->unkE].unkC;
+ } else if (arg1 == '\t') {
+ (*arg2)++;
+ while ((*arg2 % (s32) (D_8037E900->unk4[arg0->unkE].unkC * 4)) != 0) {
+ (*arg2)++;
+ }
+ } else{
+ chunk = func_802E4D5C(arg0->unkE, arg1);
+ timg = (s32)(chunk + 1);
+ while ((timg % 8)) {
+ timg++;
+ }
+
+ gDPSetTextureImage((*gfx)++, G_IM_FMT_I, G_IM_SIZ_8b, chunk->w, timg);
+ gDPSetTile((*gfx)++, G_IM_FMT_I, G_IM_SIZ_8b, (((((chunk->w - 0) + 1)*1) + 7) >> 3), 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD);
+ gDPLoadSync((*gfx)++);
+ gDPLoadTile((*gfx)++, G_TX_LOADTILE, 0, 0, (chunk->w << 2), (chunk->h << 2));
+ gDPPipeSync((*gfx)++);
+ gDPSetTile((*gfx)++, G_IM_FMT_I, G_IM_SIZ_8b, (((((chunk->w - 0) + 1)*1) + 7) >> 3), 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD);
+ gDPSetTileSize((*gfx)++, G_TX_RENDERTILE, 0, 0, chunk->w << 2, chunk->h << 2);
+ gSPScisTextureRectangle((*gfx)++, (*arg2 << 2), (*arg3 << 2), ((*arg2 + chunk->w) << 2), ((*arg3 + chunk->h) << 2), G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400);
+ if (arg0->unk8 & 2) {
+ *arg2 += D_8037E900->unk4[arg0->unkE].unkC * 2;
+ }
+ else{
+ *arg2 += chunk->x;
+ }
+ }
+}
+
+void func_802E57E0(struct5DBC0_1s *arg0, Gfx **gfx) {
+ s32 temp_v0;
+ s32 spA8;
+ s32 spA4;
+ s32 var_s3;
+ char var_s2;
+
+
+ if (!(arg0->unk8 & 4)) { //draw transparent grey background
+ temp_v0 = func_802E51A4(&D_8037E900->string[arg0->unkC], arg0->unkE, arg0->unk0, arg0->unk8);
+ gDPPipeSync((*gfx)++);
+ gDPSetPrimColor((*gfx)++, 0, 0, 0x28, 0x28, 0x28, 0x96);
+ gDPSetCombineMode((*gfx)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+ gDPScisFillRectangle((*gfx)++,
+ (arg0->unk0 - 2),
+ arg0->unk4,
+ (arg0->unk0 + temp_v0 + 2),
+ (D_8037E900->unk4[arg0->unkE].unkD + arg0->unk4)
+ );
+ gDPPipeSync((*gfx)++);
+ }
+ gDPSetCombineLERP((*gfx)++, PRIMITIVE, ENVIRONMENT, TEXEL0_ALPHA, ENVIRONMENT, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT, TEXEL0_ALPHA, ENVIRONMENT, 0, 0, 0, TEXEL0);
+
+ if (arg0->unk18 == -1) {
+ gDPSetPrimColor((*gfx)++, 0, 0, arg0->unkF[0], arg0->unkF[1], arg0->unkF[2], 0);
+ gDPSetEnvColor((*gfx)++, arg0->unkF[0], arg0->unkF[1], arg0->unkF[2], 0);
+ spA8 = arg0->unk0;
+ spA4 = arg0->unk4;
+ for(var_s3 = 0; (var_s2 = D_8037E900->string[var_s3 + arg0->unkC]) != 0; var_s3++) {
+ func_802E533C(arg0, var_s2, &spA8, &spA4, gfx);
+ }
+ } else {
+ spA8 = arg0->unk0;
+ spA4 = arg0->unk4;
+ for(var_s3 = 0; (var_s2 = D_8037E900->string[var_s3 + arg0->unkC]); var_s3++) {
+ if (var_s3 == arg0->unk18) {
+ gDPSetPrimColor((*gfx)++, 0, 0, arg0->unk12[0], arg0->unk12[1], arg0->unk12[2], 0x00);
+ gDPSetEnvColor((*gfx)++, arg0->unk12[0], arg0->unk12[1], arg0->unk12[2], 0);
+ if (var_s2 == ' ') {
+ s32 sp70;
+ s32 sp6C, sp68;
+ s32 sp64, sp60;
+ sp64 = spA4 - 5;\
+ sp60 = spA4 + 5;
+ sp68 = sp6C = spA8;
+ func_802E533C(arg0, '-', &sp6C, &sp64, gfx);
+ func_802E533C(arg0, '-', &sp68, &sp60, gfx);
+ }
+ } else {
+ gDPSetPrimColor((*gfx)++, 0, 0, arg0->unkF[0], arg0->unkF[1], arg0->unkF[2], 0);
+ gDPSetEnvColor((*gfx)++, arg0->unkF[0], arg0->unkF[1], arg0->unkF[2], 0);
+ }
+ func_802E533C(arg0, var_s2, &spA8, &spA4, gfx);
+ }
+ }
+}
void func_802E5C98(Gfx **gdl){
int i;
@@ -242,15 +357,66 @@ void func_802E5F68(void){
func_802E4C78();
}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E5F88.s")
+void func_802E5F88(s32 arg0, s32 arg1, char *arg2) {
+ s32 sp24;
+ u8 sp20[3] = D_80368834;
+
+ sp24 = func_802E4E54(0);
+ func_802E502C(arg0, arg1, sp24, arg2, &sp20);
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E5FE4.s")
+void func_802E5FE4(s32 arg0, s32 arg1, char *arg2) {
+ s32 sp24;
+ u8 sp20[3] = D_80368838;
+
+ sp24 = func_802E4E54(0);
+ func_802E502C(arg0, arg1, sp24, arg2, &sp20);
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6040.s")
+void func_802E6040(s32 arg0, s32 arg1, char *arg2) {
+ s32 sp2C;
+ u8 sp28[3] = D_8036883C;
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E60D4.s")
+ sp2C = func_802E4E54(0);
+ arg0 *= D_8037E900->unk4[sp2C].unkC;
+ arg1 *= D_8037E900->unk4[sp2C].unkD;
+ func_802E502C(arg0, arg1, sp2C, arg2, &sp28);
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6270.s")
+void func_802E60D4(s32 arg0, s32 arg1, s32 arg2, s32 arg3, u8 arg4[3], u8 arg5[3], s32 arg6) {
+ s32 sp24;
+
+ sp24 = D_8037E900->unkC++;
+ if (D_8037E900->unkC >= 2) {
+ D_8037E900->unk0 = (struct5DBC0_1s *)realloc(D_8037E900->unk0, (D_8037E900->unkC + 1)* sizeof(struct5DBC0_1s));
+ }
+ D_8037E900->unk0[sp24].unk0 = arg0;
+ D_8037E900->unk0[sp24].unk4 = arg1;
+ D_8037E900->unk0[sp24].unkE = arg2;
+ D_8037E900->unk0[sp24].unkC = func_802E4F98(arg3);
+ D_8037E900->unk0[sp24].unk8 = D_8037E900->flags;
+ \
+ D_8037E900->unk0[sp24].unkF[0] = arg4[0];
+ D_8037E900->unk0[sp24].unkF[1] = arg4[1];
+ D_8037E900->unk0[sp24].unkF[2] = arg4[2];
+
+ D_8037E900->unk0[sp24].unk12[0] = arg5[0];
+ D_8037E900->unk0[sp24].unk12[1] = arg5[1];
+ D_8037E900->unk0[sp24].unk12[2] = arg5[2];
+
+ D_8037E900->unk0[sp24].unk18 = arg6;
+}
+
+void func_802E6270(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
+ s32 temp_v0;
+ u8 sp30[3] = D_80368840;
+ u8 sp2C[3] = D_80368844;
+
+ temp_v0 = func_802E4E54(0);
+ arg0 *= D_8037E900->unk4[temp_v0].unkC;
+ arg1 *= D_8037E900->unk4[temp_v0].unkD;
+ func_802E60D4(arg0, arg1, temp_v0, arg2, &sp30, &sp2C, arg3);
+}
void func_802E632C(u8 arg0, u8 arg1, u8 arg2){
D_8037E900->unk1C[0] = arg0;
@@ -281,21 +447,66 @@ void func_802E63D8(u8 arg0, u8 arg1, u8 arg2, f32 arg3){
}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6440.s")
+u16 func_802E6440(void) {
+ return (((((s32) D_8037E900->unk1C[0] >> 3) & 0x1F) << 11)
+ | ((((s32) D_8037E900->unk1C[1] >> 3) & 0x1F) << 6)
+ | ((((s32) D_8037E900->unk1C[2] >> 3) & 0x1F) << 1)
+ | 1);
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6488.s")
+void func_802E6488(s32 arg0, s32 arg1, char *arg2) {
+ s32 temp_v0;
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6508.s")
+ temp_v0 = func_802E4E54(0);
+ arg0 *= D_8037E900->unk4[temp_v0].unkC;
+ arg1 *= D_8037E900->unk4[temp_v0].unkD;
+ func_802E502C(arg0, arg1, temp_v0, arg2, D_8037E900->unk1C);
+}
+
+
+void func_802E6508(s32 arg0, s32 arg1, char *arg2) {
+ func_802E502C(arg0, arg1, func_802E4E54(0), arg2, D_8037E900->unk1C);
+}
+
+
+void func_802E6558(s32 arg0, s32 arg1, s32 arg2) {
+ u8 sp1C[3];
+ void *temp_v0;
+
+ temp_v0 = D_8037E900;
+ sp1C[0] = D_8037E900->unk1C[0];
+ sp1C[1] = D_8037E900->unk1C[1];
+ sp1C[2] = D_8037E900->unk1C[2];
+ func_802E632C(0xC8, 0xEB, 0xD2);
+ func_802E6488(arg0, arg1, arg2);
+ D_8037E900->unk1C[0] = sp1C[0];
+ D_8037E900->unk1C[1] = sp1C[1];
+ D_8037E900->unk1C[2] = sp1C[2];
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6558.s")
void func_802E65E8(char *str){
func_802E51A4(str, func_802E4E54(0), 0, D_8037E900->flags);
}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6628.s")
+void func_802E6628(s32 arg0, char *arg1) {
+ s32 sp2C;
+ u8 sp28[3] = D_80368848;
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E66F0.s")
+ sp2C = func_802E4E54(0);
+ arg0 *= D_8037E900->unk4[sp2C].unkD;
+ func_802E502C((s32) (((f32) D_80276588 - (f32) func_802E51A4(arg1, sp2C, 0, D_8037E900->flags)) / 2), arg0, sp2C, arg1, &sp28);
+}
+
+void func_802E66F0(s32 arg0, s32 arg1) {
+ s32 sp24;
+ s32 temp_v0;
+ void *temp_v1;
+
+ sp24 = func_802E4E54(0);
+ arg0 *= D_8037E900->unk4[sp24].unkD;
+ func_802E502C((s32) (((f32) D_80276588 - (f32) func_802E51A4(arg1, sp24, 0, D_8037E900->flags)) / 2), arg0, sp24, arg1, D_8037E900->unk1C);
+}
void func_802E67AC(void){
D_8037E900->flags |= 1;
@@ -313,7 +524,40 @@ void func_802E6800(s32 arg0){
D_8037E900->flags &= ~arg0 | 0x1;
}
+#ifndef NONMATCHING
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6820.s")
+#else
+void func_802E6820(s32 arg0) {
+ BKSprite *prev_sprite_ptr;
+ s32 chunk_count;
+ s32 i_chunk;
+ s32 var_s5;
+ s32 var_s6;
+
+ if (D_8037E900 != NULL) {
+ for(var_s6 = 0; var_s6 < arg0; var_s6++){
+ D_8037E900 = (struct5DBC0s *) defrag(D_8037E900);
+ D_8037E900->unk0 = (struct5DBC0_1s *)defrag(D_8037E900->unk0);
+ D_8037E900->unk4 = (struct5DBC0_2s *)defrag(D_8037E900->unk4);
+ D_8037E900->string = (char *)defrag(D_8037E900->string);
+ for(var_s5 = 0; var_s5 < D_8037E900->unk10; var_s5++) {
+ if (D_8037E900->unk4[var_s5].unk8 != NULL) {
+ D_8037E900->unk4[var_s5].unk8 = (BKSpriteTextureBlock **)defrag(D_8037E900->unk4[var_s5].unk8);
+ }
+
+ prev_sprite_ptr = D_8037E900->unk4[var_s5].unk0;
+ if (D_8037E900->unk4[var_s5].unk0 != NULL) {
+ chunk_count = spriteGetFramePtr(prev_sprite_ptr, 0U)->chunkCnt;
+ D_8037E900->unk4[var_s5].unk0 = (BKSprite *)defrag_asset(D_8037E900->unk4[var_s5].unk0);
+ for(i_chunk = 0; i_chunk < chunk_count; i_chunk++){
+ D_8037E900->unk4[var_s5].unk8[i_chunk] = (BKSpriteTextureBlock *)((s32)D_8037E900->unk4[var_s5].unk0 + ((s32)D_8037E900->unk4[var_s5].unk8[i_chunk] - (s32)prev_sprite_ptr));
+ }
+ }
+ }
+ }
+ }
+}
+#endif
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_5DBC0/func_802E6A90.s")