diff --git a/README.md b/README.md
index 113e3980..9aedec7f 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# banjo (94.4536%)
+# banjo (94.5100%)
diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg
index 1f61dc60..5614633f 100644
--- a/progress/progress_core1.svg
+++ b/progress/progress_core1.svg
@@ -9,7 +9,7 @@
-
+
@@ -17,7 +17,7 @@
core1
- 89.2720%
- 89.2720%
+ 89.6609%
+ 89.6609%
\ No newline at end of file
diff --git a/progress/progress_total.svg b/progress/progress_total.svg
index a9f35b76..5c685566 100644
--- a/progress/progress_total.svg
+++ b/progress/progress_total.svg
@@ -17,7 +17,7 @@
Banjo-Kazooie (us.v10)
- 94.4536%
- 94.4536%
+ 94.5100%
+ 94.5100%
\ No newline at end of file
diff --git a/src/core1/code_ABB0.c b/src/core1/code_ABB0.c
index 94758fac..811a7aff 100644
--- a/src/core1/code_ABB0.c
+++ b/src/core1/code_ABB0.c
@@ -425,80 +425,79 @@ void draw_sprite_ia8(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabl
}
}
-#ifndef NONMATCHING
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_ABB0/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;
+void draw_sprite_rgba32(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled){
BKSpriteTextureBlock *chunk_ptr;
- u32 *var_t4;
- s16 temp_v0;
+ u32 *tmem;
+ u32 fb_value;
s16 var_v1;
- s32 temp_a1;
- s32 temp_a2;
- u16 *temp_s5;
+ s32 fb_x;
+ s32 fb_y;
+ u16 *framebuffer;
s32 temp_t1;
s32 alpha;
- s32 temp_v0_5;
- s32 var_s0;
- s32 var_t2;
- u16 *temp_a3;
+ s32 i_chunk;
+ s32 iy;
+ s32 ix;
+ u16 *pxl_ptr;
+ BKSpriteFrame *sprite_frame;
u16 p1_a;
- u32 temp_v1;
+ u32 txtr_value;
s32 red8;
s32 green8;
s32 blue8;
- temp_s5 = &D_803A5D00[D_802806EC][0];
+
+ framebuffer = &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)
+ 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++;}
+ tmem = (u32 *) (1 + chunk_ptr);
+ while (((s32) tmem) % 8)
+ {
+ tmem++;
+ }
- 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;
+ for (iy = 0; iy < chunk_ptr->h; iy++)
+ {
+ for (ix = 0; ix < chunk_ptr->w; ix++)
+ {
+ fb_x = (chunk_ptr->x + x) + ix;
+ if ((fb_x >= 0) && (fb_x < D_80276588))
+ {
+ fb_y = (chunk_ptr->y + y) + iy;
+ if ((fb_y >= 0) && (fb_y < D_8027658C))
+ {
+ txtr_value = *tmem;
+ pxl_ptr = (framebuffer + fb_x) + (fb_y * D_80276588);
+ fb_value = (unsigned int) (*pxl_ptr);
+ alpha = _SHIFTR(txtr_value, 0, 8);
+ if (alpha) {//blend texture with existing pixel color
+ red8 = ((_SHIFTR(txtr_value, 24, 8) * alpha) + (((((fb_value >> 11) )) *8) * (0xFF - alpha))) / 0xFF;
+ green8 = ((_SHIFTR(txtr_value, 16, 8) * alpha) + ((_SHIFTR(fb_value, 6, 5) * 8) * (0xFF - alpha))) / 0xFF;
+ blue8 = ((_SHIFTR(txtr_value, 8, 8) * alpha) + ((_SHIFTR(fb_value, 1, 5) * 8) * (0xFF - alpha))) / 0xFF;
+
+ *pxl_ptr = ((_SHIFTL((red8 >> 3), 11, 5) | _SHIFTL((green8 >> 3), 6, 5)) | _SHIFTL((blue8 >> 3), 1, 5)) | 1;
+ }
+ else if (!alpha_enabled) {
+ *pxl_ptr = 0x0001;
}
}
}
- var_t4++;
+ tmem++;
}
+
}
- chunk_ptr = (BKSpriteFrame *) var_t4;
+ chunk_ptr = (BKSpriteFrame *) tmem;
}
}
}
-#endif
-
void func_802499BC(s32 arg0, s32 arg1, s32 arg2, s32 arg3){//signature may have more variables passed in
}