diff --git a/include/structs.h b/include/structs.h
index 1b7369a0..9efbcbd5 100644
--- a/include/structs.h
+++ b/include/structs.h
@@ -894,4 +894,9 @@ typedef struct {
u8 pad1B[1];
}Struct83s;
+typedef struct{
+ s16 texture_type;
+ s16 count;
+ s32 offset[];
+}Struct84s;
#endif
diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg
index 106b7921..ee95b1c9 100644
--- a/progress/progress_core1.svg
+++ b/progress/progress_core1.svg
@@ -9,7 +9,7 @@
-
+
@@ -17,7 +17,7 @@
core1
- 70.3700%
- 70.3700%
+ 71.6821%
+ 71.6821%
\ No newline at end of file
diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg
index de510048..433ce22d 100644
--- a/progress/progress_core2.svg
+++ b/progress/progress_core2.svg
@@ -17,7 +17,7 @@
core2
- 78.4831%
- 78.4831%
+ 78.5048%
+ 78.5048%
\ No newline at end of file
diff --git a/progress/progress_total.svg b/progress/progress_total.svg
index 6b2bf19f..0f36be65 100644
--- a/progress/progress_total.svg
+++ b/progress/progress_total.svg
@@ -9,7 +9,7 @@
-
+
@@ -17,7 +17,7 @@
Banjo-Kazooie (us.v10)
- 82.4464%
- 82.4464%
+ 82.6493%
+ 82.6493%
\ No newline at end of file
diff --git a/src/core1/code_9D30.c b/src/core1/code_9D30.c
index 0447826b..3d931e7f 100644
--- a/src/core1/code_9D30.c
+++ b/src/core1/code_9D30.c
@@ -2,13 +2,18 @@
#include "functions.h"
#include "variables.h"
+
+#define IA8_I(ia) ((ia) >> 4)
+#define IA8_A(ia) ((ia) & 0xF)
+#define I4_2_RGBA16(i,a) ((i << 12) | (i << 7) | (i << 2) | (a))
+
void func_8024A3C8(s32 x, s32 y);
-void func_8024A840(s32 r, s32 g, s32 b);
+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 s16 D_803A5D00[2][0xF660]; //framebuffer
+extern u16 D_803A5D00[2][0xF660]; //framebuffer
extern s16 D_80275BBC;
@@ -118,33 +123,381 @@ s32 func_802485BC(void){
return D_80275BD0;
}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_802485C8.s")
+void func_802485C8(UNK_TYPE(s32) arg0){
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_802485D0.s")
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80248870.s")
+//BREAK?
+#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/draw_sprite_ci4.s")
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80248B40.s")
+#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/draw_sprite_ci8.s")
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80248D40.s")
+void draw_sprite_rgba16(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabled) {
+ BKSpriteFrame *sprite_ptr;
+ BKSpriteTextureBlock *chunk_ptr;
+ s16 *tmem;
+ u16 *framebuffer_ptr;
+ s32 fb_x;
+ s32 fb_y;
+ s32 i_chunk;
+ s32 txtr_x;
+ s32 txtr_y;
+ u16 *pxl_ptr;
+ u16 rgba;
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80248F9C.s")
+ framebuffer_ptr = &D_803A5D00[D_802806EC][0];
+ sprite_ptr = spriteGetFramePtr(sprite, frame);
+ if (!alpha_enabled) {
+ set_prim_color(0, 0, 0x80);
+ draw_prim_rect(x, y, sprite_ptr->w, sprite_ptr->h);
+ }
+ chunk_ptr = (BKSpriteTextureBlock *)(sprite_ptr + 1);
+ for(i_chunk = 0; i_chunk < sprite_ptr->chunkCnt; i_chunk++) {
+ for(tmem = (u16 *)(chunk_ptr + 1); (s32)tmem % 8; tmem++);
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80249210.s")
+ for(txtr_y = 0; txtr_y < chunk_ptr->h; txtr_y++) {
+ for(txtr_x = 0; txtr_x < chunk_ptr->w; txtr_x++) {
+ fb_x = chunk_ptr->x + x + txtr_x;
+ if ((fb_x >= 0) && (fb_x < D_80276588)) {
+ fb_y = chunk_ptr->y + y + txtr_y;
+ if ((fb_y >= 0) && (fb_y < D_8027658C)) {
+ pxl_ptr = framebuffer_ptr + fb_x + (fb_y * D_80276588);
+ rgba = *tmem;
+ if (rgba & 1) {
+ *pxl_ptr = rgba;
+ } else if (!alpha_enabled) {
+ *pxl_ptr = rgba | 1;
+ }
+ }
+ }
+ tmem++;
+ }
+ }
+ chunk_ptr = (BKSpriteTextureBlock *) tmem;
+ }
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80249428.s")
+#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/draw_sprite_i4.s")
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80249644.s")
+#ifndef NONMATCHING
+#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/draw_sprite_ia4.s")
+#else
+void draw_sprite_ia4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enabled) {
+ BKSpriteFrame *frame_ptr;
+ BKSpriteTextureBlock *chunk_ptr;
+ s16 *temp_v0;
+ u8 *tmem;
+ s32 fb_x;
+ s32 fb_y;
+ s32 p1;
+ s32 p2;
+ u16 *framebuffer_ptr;
+ u32 p1_i;
+ u32 p1_a;
+ u32 p2_i;
+ u32 p2_a;
+ s32 txtr_y;
+ s32 i_chunk;
+ s32 txtr_x;
+ u16 *fb_pxl_ptr;
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_802499BC.s")
+ framebuffer_ptr = &D_803A5D00[D_802806EC][0];
+ frame_ptr = spriteGetFramePtr(sprite, frame);
+ if (!aplha_enabled) {
+ set_prim_color(0, 0, 0x80);
+ draw_prim_rect(x, y, frame_ptr->w, frame_ptr->h);
+ }
+ chunk_ptr = (BKSpriteTextureBlock *)(frame_ptr + 1);
+ for(i_chunk = 0; i_chunk < frame_ptr->chunkCnt; i_chunk++) {
+ for(tmem = (u8*)(chunk_ptr + 1); (s32)tmem % 8; tmem++);
+
+ for(txtr_y = 0; txtr_y < chunk_ptr->h; txtr_y++) {
+ for(txtr_x = 0; txtr_x < chunk_ptr->w; txtr_x += 2) {
+ fb_x = chunk_ptr->x + x + txtr_x;
+ if ((fb_x >= 0) && (fb_x < D_80276588)) {
+ fb_y = chunk_ptr->y + y + txtr_y;
+ if ((fb_y >= 0) && (fb_y < D_8027658C)) {
+ fb_pxl_ptr = framebuffer_ptr + fb_x + (fb_y * D_80276588);
+ p1 = (*tmem >> 4);
+ p2 = *tmem & 0xF;
+ p1_i = p1 & 0xE;
+ p1_a = p1 & 1;
+ p2_i = p2 & 0xE;
+ p2_a = p2 & 1;
+ if (p1_a) {
+ *fb_pxl_ptr = (p1_i << 0xC) | (p1_i << 7) | (p1_i << 2) | p1_a;
+ } else if (!aplha_enabled) {
+ *fb_pxl_ptr = 1;
+ }
+ if (p2_a) {
+ *(fb_pxl_ptr + 1) = (p2_i << 0xC) | (p2_i << 7) | (p2_i << 2) | p2_a;
+ } else if (!aplha_enabled) {
+ *(fb_pxl_ptr + 1) = 1;
+ }
+ }
+ }
+ tmem++;
+ }
+ }
+ chunk_ptr = (BKSpriteTextureBlock *) tmem;
+ }
+}
+#endif
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_802499D0.s")
+void draw_sprite_i8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled) {
+ BKSpriteFrame *frame_ptr;
+ BKSpriteTextureBlock *chunk_ptr;
+ s16 *pixel_ptr;
+ u8 *txtr_ptr;
+ s32 fb_y;
+ u16 *framebuffer_ptr;
+ s32 intensity;
+ s32 fb_x;
+ s32 txtr_x;
+ s32 i_chunk;
+ s32 txtr_y;
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_802499E4.s")
+ framebuffer_ptr = &D_803A5D00[D_802806EC][0];
+ frame_ptr = spriteGetFramePtr(sprite, frame);
+ if (!alpha_enabled) {
+ set_prim_color(0, 0, 0x80);
+ draw_prim_rect(x, y, frame_ptr->w, frame_ptr->h);
+ }
+ chunk_ptr = (BKSpriteTextureBlock *)(frame_ptr + 1);
+ for(i_chunk = 0; i_chunk < frame_ptr->chunkCnt; i_chunk++){
+ //align
+ for(txtr_ptr = (u8*)(chunk_ptr + 1); (s32)txtr_ptr % 8; txtr_ptr++);
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80249CEC.s")
+ for(txtr_y = 0; txtr_y < chunk_ptr->h; txtr_y++){
+ for(txtr_x = 0; txtr_x < chunk_ptr->w; txtr_x++){
+ fb_x = chunk_ptr->x + x + txtr_x;
+ if (fb_x >= 0) {
+ if (fb_x < D_80276588) {
+ fb_y = chunk_ptr->y + y + txtr_y;
+ if ((fb_y >= 0) && (fb_y < D_8027658C)) {
+ pixel_ptr = framebuffer_ptr + fb_x + fb_y * D_80276588;
+ intensity = (s32) *txtr_ptr >> 3;
+ if (intensity != 0) {
+ *pixel_ptr = (intensity << 0xB) | (intensity << 6) | (intensity << 1) | 1;
+ } else if (!alpha_enabled) {
+ *pixel_ptr = 1;
+ }
+ }
+ }
+ }
+ txtr_ptr += 1;
+ }
+ }
+ chunk_ptr = (BKSpriteFrame *) txtr_ptr;
+ }
+}
+
+void draw_sprite_ia8(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabled) {
+ BKSpriteFrame *sprite_frame;
+ BKSpriteTextureBlock *chunk_ptr;
+ s16 *temp_a1;
+ s16 *temp_v0;
+ u8 *var_t2;
+ u16 *framebuffer_ptr;
+ s32 fb_x;
+ s32 fb_y;
+ s32 var_a3;
+ s32 i_chunk;
+ s32 var_t3;
+ u32 temp_a2;
+
+ framebuffer_ptr = &D_803A5D00[D_802806EC][0];
+ sprite_frame = spriteGetFramePtr(sprite, frame);
+ if (!alpha_enabled) {
+ //draw blue rect over display area
+ set_prim_color(0, 0, 0x80);
+ draw_prim_rect(x, y, sprite_frame->w, sprite_frame->h);
+ }
+ chunk_ptr = (BKSpriteTextureBlock *)(sprite_frame + 1);
+ for(i_chunk = 0; i_chunk < sprite_frame->chunkCnt; i_chunk++) {
+ for(var_t2 = (u8*)(chunk_ptr + 1); (s32)var_t2 % 8; var_t2++);//align
+
+ for(var_t3 = 0; var_t3 < chunk_ptr->h; var_t3++){
+ for(var_a3 = 0; var_a3 < chunk_ptr->w; var_a3++) {
+ fb_x = chunk_ptr->x + x + var_a3;
+ if ((fb_x >= 0) && (fb_x < D_80276588)) {
+ fb_y = chunk_ptr->y + y + var_t3;
+ if ((fb_y >= 0) && (fb_y < D_8027658C)) {
+ temp_a1 = framebuffer_ptr + fb_x + fb_y * D_80276588;
+ temp_a2 = *var_t2;
+ if (IA8_A(temp_a2)) {
+ *temp_a1 = I4_2_RGBA16(IA8_I(temp_a2), 1);
+ } else if (!alpha_enabled) {
+ *temp_a1 = 1;
+ }
+ }
+ }
+ var_t2++;
+ }
+ }
+ chunk_ptr = (BKSpriteFrame *) var_t2;
+ }
+}
+
+#ifndef NONMATCHING
+#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/draw_sprite_rgba32.s")
+#else
+void draw_sprite_rgba32(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled) {
+ s32 i_chunk;
+ BKSpriteFrame *sprite_frame;
+ BKSpriteTextureBlock *chunk_ptr;
+ u32 *var_t4;
+ s16 temp_v0;
+ s16 var_v1;
+ s32 temp_a1;
+ s32 temp_a2;
+ u16 *temp_s5;
+ s32 temp_t1;
+ s32 alpha;
+ s32 temp_v0_5;
+ s32 var_s0;
+ s32 var_t2;
+ u16 *temp_a3;
+ u16 p1_a;
+ u32 temp_v1;
+ s32 red8;
+ s32 green8;
+ s32 blue8;
+
+ temp_s5 = &D_803A5D00[D_802806EC][0];
+ sprite_frame = spriteGetFramePtr(sprite, frame);
+ if (!alpha_enabled) {
+ set_prim_color(0, 0, 0x80);
+ draw_prim_rect(x, y, sprite_frame->w, sprite_frame->h);
+ }
+ chunk_ptr = (BKSpriteTextureBlock *)(sprite_frame + 1);
+ for(i_chunk = 0; i_chunk < sprite_frame->chunkCnt; i_chunk++){
+ if( ((chunk_ptr->x >= -5) && (chunk_ptr->x < 0x29))
+ && (chunk_ptr->y >= -5) && (chunk_ptr->y < 0x29)
+ ) {
+ //align
+ var_t4 = (u32 *)(chunk_ptr + 1);
+ while((s32)var_t4 % 8){var_t4++;}
+
+ for(var_s0 = 0; var_s0 < chunk_ptr->h; var_s0++){
+ for(var_t2 = 0; var_t2 < chunk_ptr->w; var_t2++) {
+ temp_a1 = chunk_ptr->x + x + var_t2;
+ if ((temp_a1 >= 0) && (temp_a1 < D_80276588)) {
+ temp_a2 = chunk_ptr->y + y + var_s0;
+ if ((temp_a2 >= 0) && (temp_a2 < D_8027658C)) {
+ temp_v1 = *var_t4;
+ temp_a3 = temp_s5 + temp_a1 + temp_a2 * D_80276588;
+ alpha = _SHIFTR(temp_v1, 0, 8);
+ temp_t0 = *temp_a3;
+ if (alpha != 0) {
+
+ temp_v0_5 = 0xFF - alpha;
+ red8 = (((_SHIFTR(temp_v1, 24, 8) * alpha) + ((_SHIFTR(temp_t0, 11, 5) << 3) * temp_v0_5)) / 0xFF);
+ green8 = (((_SHIFTR(temp_v1, 16, 8) * alpha) + ((_SHIFTR(temp_t0, 6, 5) << 3) * temp_v0_5)) / 0xFF);
+ blue8 = (((_SHIFTR(temp_v1, 8, 8) * alpha) + ((_SHIFTR(temp_t0, 1, 5) << 3) * temp_v0_5)) / 0xFF);
+ *temp_a3 = _SHIFTL((red8 >> 3), 11, 5)
+ | _SHIFTL((green8 >> 3), 6, 5)
+ | _SHIFTL((blue8 >> 3), 1, 5)
+ | 1;
+ } else if (!alpha_enabled) {
+ *temp_a3 = 0x0001;
+ }
+ }
+ }
+ var_t4++;
+ }
+ }
+ chunk_ptr = (BKSpriteFrame *) var_t4;
+ }
+ }
+}
+#endif
+
+
+void func_802499BC(s32 arg0, s32 arg1, s32 arg2, s32 arg3){//signature may have more variables passed in
+}
+
+void func_802499D0(s32 arg0, s32 arg1, s32 arg2, s32 arg3){//signature may have more variables passed in
+}
+
+void draw_texture_ci4(s32 x, s32 y, void *tmem, s32 w, s32 h, bool alpha_enabled){
+ s32 ix;
+ s32 iy;
+ s32 icolor;
+ u16 *framebuffer_ptr;
+ u16 *palette_ptr;
+ u8 *pixel_ptr;
+
+ palette_ptr = (u16*)tmem;
+ pixel_ptr = (u8*)&palette_ptr[0x10];
+ framebuffer_ptr = &D_803A5D00[D_802806EC][x + y * D_80276588];
+ for(iy = 0; iy < h; iy++){
+ for(ix = 0; ix < w; ix++){
+ icolor = (ix & 1)? pixel_ptr[ix/2 + (iy*w)/2] & 0xF
+ : pixel_ptr[ix/2 + (iy*w)/2] >> 4;
+ *framebuffer_ptr = palette_ptr[icolor];
+ framebuffer_ptr++;
+ }
+ framebuffer_ptr += (D_80276588 - w);
+ }
+}
+
+void func_80249CEC(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled) {
+ s16 temp_v0;
+
+ temp_v0 = sprite->type;
+ if (temp_v0 & SPRITE_TYPE_I4) {
+ draw_sprite_i4(x, y, sprite, frame, alpha_enabled);
+ } else if (temp_v0 & SPRITE_TYPE_IA4) {
+ draw_sprite_ia4(x, y, sprite, frame, alpha_enabled);
+ } else if (temp_v0 & SPRITE_TYPE_I8) {
+ draw_sprite_i8(x, y, sprite, frame, alpha_enabled);
+ } else if (temp_v0 & SPRITE_TYPE_IA8) {
+ draw_sprite_ia8(x, y, sprite, frame, alpha_enabled);
+ } else if (temp_v0 & SPRITE_TYPE_RGBA16) {
+ draw_sprite_rgba16(x, y, sprite, frame, alpha_enabled);
+ } else if (temp_v0 & SPRITE_TYPE_RGBA32) {
+ draw_sprite_rgba32(x, y, sprite, frame, alpha_enabled);
+ } else if (temp_v0 & SPRITE_TYPE_CI4) {
+ draw_sprite_ci4(x, y, sprite, frame, alpha_enabled);
+ } else if (temp_v0 & SPRITE_TYPE_CI8) {
+ draw_sprite_ci8(x, y, sprite, frame, alpha_enabled);
+ }
+}
+
+//arg4 = alpha enabled?
+void func_80249DE0(s32 x, s32 y, s16 *arg2, s32 arg3, s32 arg4) {
+ s32 ix;
+ s32 var_t2;
+ s32 iy;
+ u16 *framebuffer_ptr;
+ u16 *texture_ptr;
+ u16 temp_v1;
+ BKSpriteTextureBlock *temp_v0;
+
+ temp_v0 = func_8033EFB0(arg2, arg3);
+ texture_ptr = (u16*)(temp_v0 + 1);
+ if (*arg2 == SPRITE_TYPE_CI4) {
+ draw_texture_ci4(x, y, temp_v0 + 1, temp_v0->w, temp_v0->h, arg4);
+ return;
+ }
+ //otherwise RGBA16
+ framebuffer_ptr = &D_803A5D00[D_802806EC][x + y*D_80276588];
+ for(iy = 0; iy < temp_v0->h; iy++){
+ for(ix = 0; ix < temp_v0->w; ix++){
+ temp_v1 = *texture_ptr;
+ if (temp_v1 & 1) { //if visible
+ *framebuffer_ptr = temp_v1;
+ } else if (arg4 == 0) {
+ *framebuffer_ptr = 1;
+ }
+ texture_ptr++;
+ framebuffer_ptr++;
+ }
+ framebuffer_ptr += (D_80276588 - temp_v0->w);
+ }
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80249DE0.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_9D30/func_80249F34.s")
@@ -230,7 +583,7 @@ void func_8024A564(s32 x, s32 y, u16 *arg2, s32 arg3, s32 arg4, f32 arg5, f32 ar
#endif
//fills in rectangle in frame buffer with D_802806E0 color
-void func_8024A770(s32 x, s32 y, s32 w, s32 h) {
+void draw_prim_rect(s32 x, s32 y, s32 w, s32 h) {
s32 var_s0;
s32 var_s1;
s32 var_s4;
@@ -244,11 +597,11 @@ void func_8024A770(s32 x, s32 y, s32 w, s32 h) {
}
void func_8024A810(void){
- func_8024A840(0, 0x80, 0);
+ set_prim_color(0, 0x80, 0);
func_8024A85C(0);
}
-void func_8024A840(s32 r, s32 g, s32 b){
+void set_prim_color(s32 r, s32 g, s32 b){
D_802806E0 = r;
D_802806E4 = g;
D_802806E8 = b;
diff --git a/src/core2/code_87E30.c b/src/core2/code_87E30.c
index 1b7f7112..3a7c15dd 100644
--- a/src/core2/code_87E30.c
+++ b/src/core2/code_87E30.c
@@ -823,7 +823,7 @@ void func_80310D2C(void){
}
}
-int func_803110F8(s32 next_state, s32 arg1, s32 arg2, s32 arg3, s32 arg4){
+int func_803110F8(s32 next_state, s32 arg1, s32 arg2, s32 arg3, void (*arg4)(ActorMarker *, enum asset_e, s32)){
func_8025A55C(15000, 300, 2);
func_80311174(next_state + 0xe57, 0x84, NULL, NULL, NULL, NULL, arg4);
func_80310A5C(arg2, arg3, arg1, 0, 0);
diff --git a/src/core2/code_AEDA0.c b/src/core2/code_AEDA0.c
index a474e514..6f42f49c 100644
--- a/src/core2/code_AEDA0.c
+++ b/src/core2/code_AEDA0.c
@@ -267,7 +267,92 @@ void func_80336904(Gfx **gfx, Vtx **vtx, BKSprite *sp, u32 frame){
if(chkDataSize_1C0);
}//*/
+#ifndef NONMATCHING
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_AEDA0/func_80337B68.s")
+#else
+void func_80337B68(Gfx **gfx, Vtx **vtx, Struct84s *texture_list, s32 texture_index) {
+ s16 temp_a1;
+ s32 temp_at;
+ s32 temp_lo;
+ s32 temp_lo_2;
+ s32 temp_t9;
+ s32 temp_v1;
+ s32 var_a0;
+ s32 var_a0_2;
+ s32 var_a1;
+ s32 v2;
+ s32 var_ra;
+ s32 var_s1;
+ s32 var_s1_2;
+ s32 var_t0;
+ s32 var_t0_2;
+ s32 v0;
+ s32 var_t2;
+ s32 v1;
+ s32 var_t3;
+ s32 v3;
+ s32 var_t4;
+ s32 var_v1;
+ s32 var_v1_2;
+ s32 var_v1_3;
+ s32 var_v1_4;
+ s32 var_v1_5;
+ s32 var_v1_6;
+ s32 var_v1_7;
+ void *temp_a0;
+ void *temp_a0_2;
+ void *temp_a0_3;
+ void *temp_a0_4;
+ void *temp_a0_5;
+ void *temp_a0_6;
+ void *temp_a2;
+ void *temp_a2_2;
+ void *temp_s0;
+ Vtx *temp_s3;
+ BKSpriteTextureBlock *txtr_ptr;
+ u16 *var_t5;
+
+ func_80335D30();
+ txtr_ptr = func_8033EFB0(texture_list, texture_index);
+ temp_v1 = D_80383644;
+ temp_lo = temp_v1 / 3;
+ temp_s3 = *vtx;
+ var_s1 = 0;
+ var_t4 = (s32) (((f32) txtr_ptr->y / (f32) txtr_ptr->h) * (f32) temp_v1);
+ for(var_s1 = 0; var_s1 < 3; var_s1++){
+ var_a0 = var_t4;
+ for(var_t2 = 0; var_t2 < 2; var_t2++){
+ for(var_v1 = 0; var_v1 < 2; var_v1++){
+ (*vtx)->v.ob[0] = (s16) ((var_v1 * D_80383640) + (s32) (-((f32) txtr_ptr->x / (f32) txtr_ptr->w) * (f32) D_80383640));
+ (*vtx)->v.ob[1] = (s16) (-(var_t2 * (D_80383644/3) - (var_s1*(D_80383644/3))) + (s32) (((f32) txtr_ptr->x / (f32) txtr_ptr->w) * (f32) D_80383644));
+ (*vtx)->v.ob[2] = 0;
+ (*vtx)->v.tc[0] = ((txtr_ptr->w - 1) * var_v1) << 6;
+ (*vtx)->n.tc[1] = (0x1A * var_v1) << 6;
+ *(u32*)((*vtx)->v.cn) = 0x00007F80;
+ (*vtx)++;
+ }
+ var_a0 += -temp_lo;
+ }
+ var_t4 -= temp_lo;
+ }
+ var_t5 = (u16*)(txtr_ptr + 1);
+ v0 = 0;
+ v1 = 1;
+ v3 = 3;
+ v2 = 2;
+ gSPVertex((*gfx)++, temp_s3, 12, 0);
+ for(var_s1 = 0; var_s1 < 3; var_s1++){
+ gDPLoadTextureBlock((*gfx)++, var_t5, G_IM_FMT_RGBA, G_IM_SIZ_16b, txtr_ptr->w, ((var_s1 < 2) ? 1 : 0) + 0x1A, NULL, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSP2Triangles((gfx++), v0, v1, v3, var_s1, v2, v0, v3,var_s1);
+ var_t5 += txtr_ptr->w * 0x1A;
+ v0 += 4;
+ v1 += 4;
+ v3 += 4;
+ v2 += 4;
+ }
+ func_8033687C(gfx);
+}
+#endif
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_AEDA0/func_80338048.s")
diff --git a/src/core2/code_B8020.c b/src/core2/code_B8020.c
index 3737e27b..db7d384d 100644
--- a/src/core2/code_B8020.c
+++ b/src/core2/code_B8020.c
@@ -2,8 +2,19 @@
#include "functions.h"
#include "variables.h"
+
+
/* .bss */
-UNK_TYPE(void *)D_80384FF0;
+BKSpriteTextureBlock *D_80384FF0;
/* .code */
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B8020/func_8033EFB0.s")
+BKSpriteTextureBlock *func_8033EFB0(Struct84s *arg0, s32 arg1){
+ s32 *offset_ptr = &arg0->offset[arg1];
+ s32 mem_ptr;
+ if(arg0->offset[arg1] == -1){
+ return D_80384FF0;
+ }
+
+ mem_ptr = *offset_ptr + (s32) &arg0[0].offset[arg0->count];
+ return (BKSpriteTextureBlock *)(mem_ptr);
+}
diff --git a/src/core2/code_B9770.c b/src/core2/code_B9770.c
index d3fb812e..e5de3da3 100644
--- a/src/core2/code_B9770.c
+++ b/src/core2/code_B9770.c
@@ -2,17 +2,208 @@
#include "functions.h"
#include "variables.h"
-
+extern f32 func_80323540(struct56s *, f32, f32, f32);
extern void sfxsource_setSampleRate(u8, s32);
extern bool func_80323240(struct56s *, f32, f32[3]);
+extern f32 func_803234FC(struct56s *, f32, f32);
extern f32 func_803237E8(struct56s *);
extern f32 func_80323FDC(struct56s *, f32, f32, s32 *);
extern f32 func_803240E0(struct56s *, f32, f32, s32 *);
+extern void func_80250530(s32, u16, f32);
+extern s32 func_80255D44(s32);
extern struct56s **D_80371E70;
extern void **D_80371E74;
extern s32 D_80371E78;
extern s32 D_80371E7C;
+extern s32 D_80371E80;
+
+typedef struct {
+ f32 unk0;
+ u8 pad4[0x8];
+ struct{
+ u32 pad_bit31: 9;
+ u32 bit22: 11;
+ u32 pad_bit11: 12;
+ }unkC;
+} Struct_glspline_0;
+
+// typedef struct {
+// u8 pad_0[0x4];
+// union {
+// struct{
+// u16 bit63;
+// u16 bit47:12;
+// u16 unk0_3:3;
+// u16 pad0_0:1;
+// u32 bit31:24;
+// u32 pad4_7:8;
+// }t0;
+// struct{
+// u32 pad_bit63: 12;
+// u32 bit51: 2;
+// u32 pad_bit49: 18;
+// u32 bit31: 10;
+// u32 bit21: 11;
+// u32 bit10: 1;
+// u32 pad_bit9: 1;
+// u32 bit8: 1;
+// u32 pad_bit7: 1;
+// u32 bit6: 3;
+// u32 bit3: 3;
+// u32 pad_bit0: 1;
+// }t1;
+// struct{
+// u32 bit63: 1;
+// u32 bit62: 15;
+// u32 bit47: 8;
+// u32 bit39: 4;
+// u32 pad_bit35: 4;
+// u32 pad_bit31: 32;
+// }t2;
+// }unk4;
+// u32 padC_31:8;
+// u32 unkC_23:2;
+// u32 unkC_21:1;
+// u32 unkC_20:8;
+// u32 unkC_12:12;
+// u32 unkC_0 : 1;
+// union {
+// struct {
+// u32 pad_bit31: 24;
+// u32 bit7:7;
+// u32 bit0:1;
+// }t0;
+// struct {
+// u32 pad_bit31: 25;
+// u32 bit6: 1;
+// u32 bit5: 1;
+// u32 bit4: 1;
+// u32 pad_bit3:5;
+// }t1;
+// struct {
+// u32 pad_bit31: 24;
+// u32 bit7:5;
+// u32 pad_bit1:2;
+// }t2;
+// }unk10;
+// }Struct_glspline_0;
+
+typedef struct {
+ u32 bit31: 16;
+ u32 bit15: 12;
+ u32 bit3: 3;
+ u32 bit0: 1;
+}Struct_glspline_t0_unk4_common;
+
+typedef struct {
+ u32 bit31: 1;
+ u32 bit30: 15;
+ u32 bit15: 8;
+ u32 bit7: 4;
+ u32 bit3: 3;
+ u32 bit0: 1;
+}Struct_glspline_t0_unk4_t7;
+
+typedef struct{
+ u8 pad0[0x4];
+ union
+ {
+ Struct_glspline_t0_unk4_common common;
+ Struct_glspline_t0_unk4_t7 t7;
+ }unk4;
+ struct {
+ u32 bit31:24;
+ u32 pad4_7:8;
+ }unk8;
+ struct{
+ u32 pad_bit31:8;
+ u32 bit23:2;
+ u32 bit21:1;
+ u32 bit20:8;
+ u32 bit12:12;
+ u32 bit0:1;
+ }unkC;
+ union {
+ struct {
+ u32 pad_bit31: 24;
+ u32 bit7:7;
+ u32 bit0:1;
+ } common;
+ struct {
+ u32 pad_bit31: 24;
+ u32 bit7:6;
+ u32 pad_bit1:1;
+ u32 bit0:1;
+ }t7;
+ u32 word;
+ } unk10;
+}Struct_glspline_t0;
+
+typedef struct{
+ f32 unk0;
+ struct{
+ u32 bit31: 12;
+ u32 bit19: 2;
+ u32 bit17: 2;
+ u32 bit15: 9;
+ u32 bit6: 3;
+ u32 bit3: 3;
+ u32 pad_bit0: 1;
+ }unk4;
+ struct{
+ u32 bit31: 10;
+ u32 bit21: 11;
+ u32 bit10: 1;
+ u32 bit9: 1;
+ u32 bit8: 1;
+ u32 pad_bit7: 8;
+ } unk8;
+ struct{
+// u32 padC_31:8;
+// u32 unkC_23:2;
+// u32 unkC_21:1;
+// u32 unkC_20:8;
+ u32 bit31:9;
+ u32 bit22:11;
+ u32 bit11:11;
+ u32 bit0 : 1;
+ }unkC;
+ struct {
+ u32 bit31: 12;
+ u32 pad_bit19: 13;
+ u32 bit6: 1;
+ u32 bit5: 1;
+ u32 bit4: 1;
+ u32 pad_bit3:3;
+ }unk10;
+}Struct_glspline_t1;
+
+typedef struct{
+ u8 pad0[0xC];
+ struct{
+ u32 pad_bit31:31;
+ u32 bit0:1;
+ }unkC;
+ u8 pad10[0x4];
+}Struct_glspline_common;
+
+typedef union{
+ Struct_glspline_common common;
+ Struct_glspline_t0 t0;
+ Struct_glspline_t1 t1;
+ /* data */
+}Union_glspline;
+
+
+typedef struct{
+ s32 unk0;
+ Union_glspline spline[];
+}glspline_list;
+
+/* .rodata */
+extern char D_80378FF0[];
+extern f32 D_8037901C;
/* .bss */
s16 *D_803858A0;
@@ -24,7 +215,7 @@ f32 func_80340700(f32 value, f32 min, f32 max) {
: value;
}
-bool func_80340748(s32 arg0, s32 arg1, s32 arg2, s32 arg3){
+bool func_80340748(s32 arg0, s32 arg1, s32 arg2, f32 arg3[3], s32 arg4, s32 arg5, s32 arg6){
return FALSE;
}
@@ -131,13 +322,312 @@ int func_80342064(s32 arg0){
s32 func_803421A4(s32, f32);
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B9770/func_803421A4.s")
+
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B9770/func_80342244.s")
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B9770/func_80342260.s")
+f32 func_80342260(s32 arg0, f32 arg1, s32 arg2){
+ return func_803234FC(func_80342038(arg0), arg1, 1.0f) / ((f32)arg2 /4);
+}
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B9770/func_803422AC.s")
+void func_803422AC(ActorMarker *caller, enum asset_e text_id, s32 arg2){
+ jiggyscore_total();
+}
+#ifndef NONMATCHING
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B9770/func_803422D4.s")
+#else
+s32 func_803422D4(Actor *arg0, Union_glspline *arg1, glspline_list *arg2) {
+ s32 sp84 = 0;
+ u8 sp83;
+ f32 sp7C;
+ s32 sp78;
+ s32 sp74;
+ u32 sp70;
+ s32 sp6C;
+ s32 sp68;
+ s32 sp64;
+ f32 sp60;
+ f32 sp54[3];
+ f32 sp50;
+ f32 sp4C;
+ Struct_glspline_t1 *sp48; /* compiler-managed */
+ Struct_glspline_t1 *temp_v0_6;
+
+ if (arg1->common.unkC.bit0) {
+ if (D_80371E80 == 1) {
+ sp84 = 1;
+ }
+ switch (arg1->t0.unk4.common.bit3) {
+ case 1:
+ func_80250530(0, arg1->t0.unk4.common.bit31, 3.0f);
+ break;
+
+ case 2:
+ D_803858A0[arg1->t0.unk10.common.bit7] = arg1->t0.unk4.common.bit31;
+ func_8025A6EC(func_80255D30(arg1->t0.unk4.common.bit31), arg1->t0.unk4.common.bit15 * 8);
+ break;
+
+ case 3:
+ sp78 = arg1->t0.unk4.common.bit31;
+ sp7C = arg1->t0.unk8.bit31/8.388608e6f;
+ sp74 = arg1->t0.unk4.common.bit15*8;
+ sp70 = arg1->t0.unk10.common.bit7;
+ if (func_8030ED70(func_80255D44(sp78))) {
+ sp83 = func_8030D90C();
+ if (sp83 == 0){
+ return sp84;
+ }
+
+ sfxsource_setSfxId(sp83, func_80255D44(sp78));
+ func_8030DBB4(sp83, sp7C);
+ sfxsource_setSampleRate(sp83, sp74);
+ func_8030E2C4(sp83);
+ if (D_803858A0[sp70] != 0) {
+ func_8030DA44(D_803858A0[sp70]);
+ }
+ D_803858A0[sp70] = sp83;
+
+ } else {
+ func_8030E6A4(func_80255D44(sp78), sp7C, sp74);
+ }
+ break;
+
+ case 7:
+ if(((arg1->t0.unk10.word << 0x1e) >>0x1f) == TRUE){
+ arg0->unk124_11 = (arg1->t0.unk4.t7.bit31 == FALSE) ? 2
+ : (arg1->t0.unk4.t7.bit31 == TRUE) ? 1
+ : 0;
+ arg0->unk1C[0] = (arg1->t0.unk4.t7.bit30 != 0) ? (f32)((f32)arg1->t0.unk4.t7.bit30 * 0.25)
+ : 0.0f;
+ arg0->unk1C[1] = 0.0f;
+ }
+ if (arg1->t0.unkC.bit21 == 1) {
+ func_803110F8(arg1->t0.unkC.bit20, arg1->t0.unk10.t7.bit7, arg1->t0.unk4.t7.bit15, arg1->t0.unk4.t7.bit7, func_803422AC);
+ }
+ if ((arg1->t0.unkC.bit23 == 1) || (arg1->t0.unkC.bit23 == 2)) {
+ D_80371E80 = arg1->t0.unkC.bit23 - 1;
+ }
+ break;
+
+ case 6:
+ mapSpecificFlags_set(arg1->t0.unk4.common.bit31, TRUE);
+ break;
+
+ case 4:
+ if (D_803858A0[arg1->t0.unk10.common.bit7] != 0) {
+ func_8025A7DC(func_80255D30(D_803858A0[arg1->t0.unk10.common.bit7]));
+ D_803858A0[arg1->t0.unk10.common.bit7] = 0;
+ }
+ break;
+
+ case 5:
+ if (D_803858A0[arg1->t0.unk10.common.bit7] != 0) {
+ func_8030DA44(D_803858A0[arg1->t0.unk10.common.bit7]);
+ D_803858A0[arg1->t0.unk10.common.bit7] = 0;
+ }
+ break;
+ }
+
+ if (arg1->t0.unkC.bit12 != 0) {
+ sp64 = 0;
+ sp68 = func_80340760(arg1->t0.unkC.bit12, &sp6C, &sp60, sp54, arg0->unk44_14, &sp50, &sp4C);
+ if (sp68 == 0) {
+ sp64 = func_80340748(arg1->t0.unkC.bit12, &sp6C, &sp60, sp54, arg0->unk44_14, &sp50, &sp4C);
+ }
+ sp84 = 2;
+ arg0->unk44_14 = sp6C;
+ arg0->unk48 = sp60;
+ arg0->position[0] = sp54[0];
+ arg0->position[1] = sp54[1];
+ arg0->position[2] = sp54[2];
+ if (sp68 != 0) {
+ if (sp50 != -9999.0f) {
+ arg0->yaw = sp50;
+ if (arg0->marker->unk14_20 == 0x12) {
+ arg0->yaw = (f32) func_80342244((s32) arg0->yaw);
+ }
+ arg0->yaw_moving = arg0->yaw;
+ }
+ if (sp4C != -9999.0f) {
+ arg0->pitch = sp4C;
+ arg0->unk6C = arg0->pitch;
+ }
+ if ((sp50 != -9999.0f) || (sp4C != -9999.0f)) {
+ func_802CDAC4(arg0);
+ }
+ }
+ if (sp64) {
+
+ }
+ }
+
+ } else {
+ if (D_80371E80 == 1) {
+ sp84 = 1;
+ }
+ if (arg1->t1.unk8.bit8) {
+ if (arg1->t1.unk10.bit5) {
+ arg0->unk138_3 = (arg1->t1.unkC.bit11 - 0x69);
+ } else {
+ arg0->unk54 = (f32)arg1->t1.unkC.bit11 / 4;
+ }
+ }
+ if (arg1->t1.unk8.bit10) {
+ arg0->unk5C = (f32)arg1->t1.unk8.bit21 / 4;
+ arg0->unk58_31 = func_80255D58(arg1->t1.unk8.bit31);
+ if (arg0->animctrl == NULL) {
+ arg0->animctrl = animctrl_new(0);
+ animctrl_reset(arg0->animctrl);
+ }
+ animctrl_setIndex(arg0->animctrl, arg0->unk58_31);
+ animctrl_setDuration(arg0->animctrl, arg0->unk5C);
+ animctrl_setDirection(arg0->animctrl, 1);
+ if (arg0->animctrl != NULL) {
+ _func_802875AC(arg0->animctrl, "glspline.c"/*&D_80378FF0*/, 0x545);
+ }
+ }
+ switch (arg1->t1.unk4.bit6) { /* switch 2 */
+ case 1: /* switch 2 */
+ arg0->unk10_4 = TRUE;
+ arg0->unk10_8 = TRUE;
+ arg0->unk10_7 = TRUE;
+ break;
+
+ case 2: /* switch 2 */
+ arg0->unk10_4 = FALSE;
+ arg0->unk10_8 = FALSE;
+ break;
+
+ case 3: /* switch 2 */
+ arg0->unk10_4 = FALSE;
+ arg0->unk10_8 = TRUE;
+ break;
+
+ case 4: /* switch 2 */
+ arg0->unk10_4 = FALSE;
+ arg0->unk10_7 = FALSE;
+ break;
+
+ case 5: /* switch 2 */
+ arg0->unk10_4 = FALSE;
+ arg0->unk10_7 = TRUE;
+ break;
+
+ case 6: /* switch 2 */
+ arg0->unk10_4 = FALSE;
+ arg0->unk10_8 = FALSE;
+ arg0->unk10_7 = FALSE;
+ break;
+
+ case 7: /* switch 2 */
+ arg0->unk10_4 = FALSE;
+ arg0->unk10_8 = TRUE;
+ arg0->unk10_7 = TRUE;
+ break;
+ }
+
+ switch (arg1->t1.unk4.bit3) { /* switch 3 */
+ case 2: /* switch 3 */
+ arg0->unk10_6 = 0;
+ if (arg0->unk4C < 0.0f) {
+ arg0->unk4C = -arg0->unk4C;
+ } else {
+ arg0->unk4C = arg0->unk4C;
+ }
+ actor_playAnimationOnce(arg0);
+ break;
+
+ case 3: /* switch 3 */
+ arg0->unk10_6 = 0;
+ if (arg0->unk4C < 0.0f) {
+ arg0->unk4C = arg0->unk4C;
+ } else {
+ arg0->unk4C = -arg0->unk4C;
+ }
+ actor_playAnimationOnce(arg0);
+ break;
+
+ case 4: /* switch 3 */
+ arg0->unk10_6 = 1;
+ if (arg0->unk4C < 0.0f) {
+ arg0->unk4C = -arg0->unk4C;
+ } else {
+ arg0->unk4C = arg0->unk4C;
+ }
+ actor_loopAnimation(arg0);
+ break;
+
+ case 5: /* switch 3 */
+ arg0->unk10_6 = 1;
+ if (arg0->unk4C < 0.0f) {
+ arg0->unk4C = arg0->unk4C;
+ } else {
+ arg0->unk4C = -arg0->unk4C;
+ }
+ actor_loopAnimation(arg0);
+ break;
+
+ case 6: /* switch 3 */
+ arg0->unk10_6 = 2;
+ break;
+ }
+
+ if (arg1->t1.unk4.bit19 != 0) {
+ arg0->unk10_3 = arg1->t1.unk4.bit19;
+ }
+
+ if (arg1->t1.unk10.bit6 != arg0->unk138_30) {
+ arg0->unk138_30 = arg1->t1.unk10.bit6;
+ }
+
+ if (arg1->t1.unk8.bit9) {
+ if (!func_802E4A08() && (arg0->modelCacheIndex == ACTOR_123_MAGIC_CARPET_2)) {
+ arg0->unk4C = func_80323540(func_80342038(arg0->unk44_14), arg0->unk48, 1.0f, 500.0f) / ((f32)arg1->t1.unkC.bit22 / 4);
+ } else {
+ arg0->unk4C = func_80342260(arg0->unk44_14, arg0->unk48, arg1->t1.unkC.bit22);
+ }
+ }
+ if (arg1->t1.unk4.bit31 != 0) {
+ sp48 = &arg2->spline[0].t1;
+ temp_v0_6 = &arg2->spline[arg2->unk0].t1;
+ while(sp48->unk10.bit31 != arg1->t1.unk4.bit31 && sp48 < temp_v0_6){
+ sp48++;
+ }
+ arg0->unkF4_24 = arg1->t0.unk4.common.bit31;
+ arg0->unk70 = arg1->t1.unk0;
+ arg0->unk74 = sp48->unk0;
+ if (arg1->t1.unk4.bit17 & 1) {
+ arg0->unk38_13 = arg1->t1.unkC.bit31;
+ arg0->unk38_21 = sp48->unkC.bit31;
+ arg0->unk78_31 = arg1->t1.unk4.bit15;
+ arg0->unk78_22 = sp48->unk4.bit15;
+ if (arg0->marker->unk14_20 == 0x12) {
+ arg0->unk38_13 = func_80342244(arg0->unk38_13);
+ arg0->unk38_21 = func_80342244(arg0->unk38_21);
+ }
+ arg0->yaw = arg0->yaw_moving = (f32) arg0->unk38_13;
+ arg0->pitch = arg0->unk6C = (f32) arg0->unk78_31;
+ }
+ if (arg1->t1.unk4.bit17 & 2) {
+ arg0->unk140 = arg0->unk4C;
+ arg0->unk144 = func_803234FC(func_80342038(arg0->unk44_14), sp48->unk0, 1.0f) / ((f32)sp48->unkC.bit22 / 4);
+ }
+ }
+ if (!arg0->unk10_4) {
+ if (arg0->unk10_8) {
+ arg0->yaw_moving = (f32)arg1->t1.unkC.bit31;
+ if (arg0->marker->unk14_20 == 0x12) {
+ arg0->yaw_moving = (f32) func_80342244((s32) arg0->yaw_moving);
+ }
+ }
+ if (arg0->unk10_7) {
+ arg0->unk6C = (f32)arg1->t1.unk4.bit15;
+ }
+ }
+ }
+ return sp84;
+}
+#endif
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B9770/func_803430B4.s")
@@ -244,7 +734,7 @@ void func_80343DEC(Actor *this){
void func_80343E20(s32 arg0, s32 arg1, f32 arg2, s32 arg3) {
u8 temp_v0;
- if (func_8030ED70(func_80255D44()) != 0) {
+ if (func_8030ED70(func_80255D44(arg0)) != 0) {
temp_v0 = func_8030D90C();
if (temp_v0 != 0) {
sfxsource_setSfxId(temp_v0, func_80255D44(arg0));
diff --git a/subyaml/core2.us.v10.yaml b/subyaml/core2.us.v10.yaml
index 96b34571..ac16d593 100644
--- a/subyaml/core2.us.v10.yaml
+++ b/subyaml/core2.us.v10.yaml
@@ -341,7 +341,7 @@ segments:
- [0xB6EA0, c, code_B6EA0] #DONE
- [0xB7B20, c, code_B7B20]
- [0xB7F40, c, code_B7F40] #DONE
- - [0xB8020, c, code_B8020]
+ - [0xB8020, c, code_B8020] #DONE
- [0xB8070, c, code_B8070] #DONE
- [0xB8080, c, code_B8080]
- [0xB8860, c, code_B8860] #DONE
@@ -769,7 +769,9 @@ segments:
- [0xF1FF0, bin, code_B6C60]
- [0xF2000, .rodata, code_B6CE0]
- [0xF2030, .rodata, code_B9090]
- - [0xF2060, bin, data_F2060]
+ - [0xF2060, bin, F2060]
+ # - [0xF2070, .rodata, code_B9770]
+ # - [0xF20C8, bin, data_F20C8]
- [0xF20F0, .rodata, code_BD100]
- [0xF2110, .rodata, code_BDCC0]
- [0xF2130, .rodata, code_BE2C0]
diff --git a/symbol_addrs.core1.us.v10.txt b/symbol_addrs.core1.us.v10.txt
index 1ccf2ad1..5e8cb19e 100644
--- a/symbol_addrs.core1.us.v10.txt
+++ b/symbol_addrs.core1.us.v10.txt
@@ -12,6 +12,16 @@ guScale = 0x80241304;
_guMtxIdentF_80245D44 = 0x80245D44;
guRotateRPYF = 0x80241348;
guPerspective = 0x802462D4;
+draw_sprite_ci4 = 0x802485D0;
+draw_sprite_ci8 = 0x80248870;
+draw_sprite_rgba16 = 0x80248B40;
+draw_sprite_i4 = 0x80248D40;
+draw_sprite_ia4 = 0x80248F9C;
+draw_sprite_i8 = 0x80249210;
+draw_sprite_ia8 = 0x80249428;
+draw_sprite_rgba32 = 0x80249644;
+draw_prim_rect = 0x8024A770;
+set_prim_color = 0x8024A840;
spriteGetFrameCount = 0x802510C0;
spriteGetFramePtr = 0x802510C8;
get_loaded_overlay_id = 0x80251230;
diff --git a/symbol_addrs.core2.us.v10.txt b/symbol_addrs.core2.us.v10.txt
index 85fcc87f..0dcbd982 100644
--- a/symbol_addrs.core2.us.v10.txt
+++ b/symbol_addrs.core2.us.v10.txt
@@ -454,6 +454,7 @@ D_80378F64 = 0x80378F64;
D_80378F68 = 0x80378F68;
D_80378FC8 = 0x80378FC8;
D_80378FCC = 0x80378FCC;
+D_8037901C = 0x8037901C;
D_80379080 = 0x80379080;
D_80379084 = 0x80379084;
D_80379088 = 0x80379088;