From 4b6eec06cb7968a179c9c1a91ecce6ec7eaf4dcf Mon Sep 17 00:00:00 2001 From: Banjo Kazooie Date: Thu, 15 Dec 2022 14:01:35 -0600 Subject: [PATCH] core1/code_ABB0.c done --- README.md | 2 +- decompressed.us.v10.yaml | 2 +- progress/progress_core1.svg | 6 +++--- progress/progress_total.svg | 4 ++-- src/core1/code_13990.c | 1 - src/core1/code_18350.c | 10 +++++----- src/core1/code_ABB0.c | 38 ++++++++++++++++++++++++++++++++++++- src/core2/code_5FD90.c | 2 +- src/core2/code_C0E60.c | 11 +++++------ src/core2/code_C4B0.c | 8 +++----- 10 files changed, 58 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index d52b32e1..3c2b20f2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (95.8852%) +# banjo (95.9391%) diff --git a/decompressed.us.v10.yaml b/decompressed.us.v10.yaml index 64cfde66..c4a253ce 100644 --- a/decompressed.us.v10.yaml +++ b/decompressed.us.v10.yaml @@ -158,7 +158,7 @@ segments: - [0xF211B0, c, code_7F60] #DONE - [0xF21EA0, c, code_8C50] #DONE - [0xF22F80, c, code_9D30] - - [0xF23E00, c, code_ABB0] + - [0xF23E00, c, code_ABB0] #DONE - [0xF260B0, c, done/code_CE60] #DONE - [0xF275B0, c, code_E360] #DONE - [0xF27D40, c, code_EAF0] diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg index 10006a55..cd7ed568 100644 --- a/progress/progress_core1.svg +++ b/progress/progress_core1.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core1 - 93.0961% - 93.0961% + 93.4675% + 93.4675% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index 35037393..ff4530d3 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 95.8852% - 95.8852% + 95.9391% + 95.9391% \ No newline at end of file diff --git a/src/core1/code_13990.c b/src/core1/code_13990.c index ed5daca8..a8fb5f13 100644 --- a/src/core1/code_13990.c +++ b/src/core1/code_13990.c @@ -158,7 +158,6 @@ void func_80251BCC(Mtx* arg0) { f32 *v0; v0 = D_80282FD0 = &D_80282810; - // a0 = &arg0; for(i = 0; i < 4*4; i+=4){ for(j = 0; j < 4; j++){ *(v0++) = *(((f32*)arg0)++); diff --git a/src/core1/code_18350.c b/src/core1/code_18350.c index 227b3c0d..1da30e8f 100644 --- a/src/core1/code_18350.c +++ b/src/core1/code_18350.c @@ -646,7 +646,7 @@ bool func_8025773C(f32 *timer, f32 delta) return FALSE; } -void func_8025778C(f32 dst[3], f32 arg1[3], f32 arg2[9]){ +void func_8025778C(f32 dst[3], f32 arg1[3], f32 arg2[3][3]){ f32 sp54; f32 sp50; f32 sp4C; @@ -654,9 +654,9 @@ void func_8025778C(f32 dst[3], f32 arg1[3], f32 arg2[9]){ f32 sp34[3]; f32 sp28[3]; - func_802596AC(sp40, arg2, &arg2[3], arg1); - func_802596AC(sp34, &arg2[3], &arg2[6], arg1); - func_802596AC(sp28, &arg2[6], arg2, arg1); + func_802596AC(sp40, arg2[0], arg2[1], arg1); + func_802596AC(sp34, arg2[1], arg2[2], arg1); + func_802596AC(sp28, arg2[2], arg2[0], arg1); sp54 = ml_vec3f_distance_squared(sp40, arg1); sp50 = ml_vec3f_distance_squared(sp34, arg1); @@ -955,7 +955,7 @@ int func_802582EC(f32 vec[3]) } //ml_vec3f_is_not_zero -int func_80258368(f32 vec[3]) +bool func_80258368(f32 vec[3]) { return vec[0] != 0 || vec[1] != 0 || vec[2] != 0; } diff --git a/src/core1/code_ABB0.c b/src/core1/code_ABB0.c index f21f8d60..b25c79f7 100644 --- a/src/core1/code_ABB0.c +++ b/src/core1/code_ABB0.c @@ -7,6 +7,14 @@ #define IA8_A(ia) ((ia) & 0xF) #define I4_2_RGBA16(i,a) ((i << 12) | (i << 7) | (i << 2) | (a)) +#define RGBA16_R5(rgba) ((rgba) >> 11) +#define RGBA16_G5(rgba) (((rgba) >> 6) & 0x1f) +#define RGBA16_B5(rgba) (((rgba) >> 1) & 0x1f) +#define RGBA16_RED5(rgba) ((rgba) >> 11) +#define C5_TO_C8(c5) ((c5) << 3) +#define C8_TO_C5(c5) ((c5) >> 3) + + void func_8024A3C8(s32 x, s32 y); void draw_prim_rect(s32 x, s32 y, s32 w, s32 h); void set_prim_color(s32 r, s32 g, s32 b); @@ -583,8 +591,36 @@ void func_80249DE0(s32 x, s32 y, s16 *arg2, s32 arg3, s32 arg4) { } } +void func_80249F34(s32 x, s32 y, Struct84s* maskList, s32 maskIndex, s32 mX, s32 mY, s32 mW, s32 mH, s32 maskColor, s32 mStride, bool dim, s32 replacementColor) { + BKSpriteTextureBlock* mask_texture; + s32 ix; + s32 iy; + u16* color_ptr; + u16* mask_ptr; -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_ABB0/func_80249F34.s") + mask_texture = func_8033EFB0(maskList, maskIndex); + mask_ptr = (u16*)(mask_texture + 1) + mX + mY * mask_texture->w; + color_ptr = &D_803A5D00[D_802806EC][x + y * framebuffer_width]; + for(iy = 0; iy < mH; iy += mStride){ + for(ix = 0; ix < mW; ix++){ + + if(maskColor != *mask_ptr){ + *color_ptr = (replacementColor != 0)? replacementColor : *mask_ptr; + } + else if(dim){ + *color_ptr = _SHIFTL(C8_TO_C5(C5_TO_C8(RGBA16_R5(*color_ptr)) / 2), 11, 5) + | _SHIFTL(C8_TO_C5(C5_TO_C8(RGBA16_G5(*color_ptr)) / 2), 6, 5) + | _SHIFTL(C8_TO_C5(C5_TO_C8(RGBA16_B5(*color_ptr)) / 2), 1, 5) + | 1; + } + + color_ptr++; + mask_ptr++; + } + mask_ptr += ((mStride * mask_texture->w) - mW); + color_ptr += (framebuffer_width - mW); + } +} //fill framebuffer with vert and horz lines void func_8024A284(s32 x, s32 y, s32 arg2, s32 arg3, s32 horz_spacing, s32 vert_spacing) { diff --git a/src/core2/code_5FD90.c b/src/core2/code_5FD90.c index b45f8ecc..de555db6 100644 --- a/src/core2/code_5FD90.c +++ b/src/core2/code_5FD90.c @@ -162,7 +162,7 @@ void func_802E70FC(BKCollisionList *collision_list, s32 arg1[3], s32 arg2[3], BK } } -void func_802E73C8(f32 (*arg0)[3]) { +void func_802E73C8(f32 arg0[3][3]) { s32 i; for(i = 0; i < 3; i++){ arg0[i][0] = D_8037EAA8[i][0]; diff --git a/src/core2/code_C0E60.c b/src/core2/code_C0E60.c index c72d2c90..ac19507d 100644 --- a/src/core2/code_C0E60.c +++ b/src/core2/code_C0E60.c @@ -68,7 +68,7 @@ s32 D_803860A4; s32 D_803860A8; s32 D_803860AC; s32 spriteRenderHasPalette; -s32 D_803860B4; +s32 spriteRender1PrimMode; /* .code */ void func_80347DF0(Struct81s *arg0){ @@ -148,15 +148,14 @@ void func_80348044(Gfx **gfx, BKSprite* sprite, s32 frame, s32 tmem, s32 rtile, gDPSetTextureLUT((*gfx)++, G_TT_RGBA16); gDPLoadTLUT_pal16((*gfx)++, 0, palette_addr); spriteRenderHasPalette = TRUE; - D_803860B4 = 0; + spriteRender1PrimMode = FALSE; D_80386074 = 0; var_v1 = palette_addr + 0x20; D_80386098 = D_8038607C = 0; } else if (sprite->type & SPRITE_TYPE_CI8) { gDPPipelineMode((*gfx)++, G_PM_1PRIMITIVE); for(palette_addr = (s32)(sprite_frame + 1); palette_addr % 8; palette_addr++); - D_803860B4 = spriteRenderHasPalette = TRUE; - // D_803860B4 = 1; + spriteRender1PrimMode = spriteRenderHasPalette = TRUE; D_80386074 = NULL; D_8038607C = 0; var_v1 = palette_addr + 0x200; @@ -300,9 +299,9 @@ void func_80349B1C(Gfx **gfx) { gDPPipeSync((*gfx)++); gDPSetTextureLUT((*gfx)++, G_TT_NONE); spriteRenderHasPalette = FALSE; - if (D_803860B4) { + if (spriteRender1PrimMode) { gDPPipelineMode((*gfx)++, G_PM_NPRIMITIVE); - D_803860B4 = FALSE; + spriteRender1PrimMode = FALSE; } } } diff --git a/src/core2/code_C4B0.c b/src/core2/code_C4B0.c index 09e9f5e9..6c1618b7 100644 --- a/src/core2/code_C4B0.c +++ b/src/core2/code_C4B0.c @@ -26,10 +26,8 @@ typedef struct { f32 unk28[3]; f32 unk34[3]; s32 unk40; - f32 unk44[3]; - u8 pad50[0x18]; - f32 unk68[3]; - u8 pad74[0x18]; + f32 unk44[3][3]; + f32 unk68[3][3]; s32 unk8C; }Struct_core2_C4B0_0; @@ -509,7 +507,7 @@ BKCollisionTri *func_802946F0(void){ return D_8037C204; } -int func_802946FC(s32 arg0, s32 arg1){ +bool func_802946FC(f32 arg0[3][3], s32 arg1){ if(arg1 == 0){ return 0; }