diff --git a/README.md b/README.md
index ed0d3406..a914f695 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# banjo (98.4559%)
+# banjo (98.5170%)
diff --git a/include/prop.h b/include/prop.h
index 4ef94b3d..6e7f4efc 100644
--- a/include/prop.h
+++ b/include/prop.h
@@ -19,7 +19,7 @@ typedef struct sprite_prop_s{
s16 unk4[3];
u16 unk8_15: 5;
u16 unk8_10: 5;
- u16 pad8_5: 1;
+ u16 unk8_5: 1;
u16 unk8_4: 1;
u16 unk8_3: 1;
u16 unk8_2: 1;
diff --git a/include/structs.h b/include/structs.h
index e6eaea8b..4c0c97ac 100644
--- a/include/structs.h
+++ b/include/structs.h
@@ -64,7 +64,13 @@ typedef struct bk_sprite_s{
s16 unk6;
s16 unk8;
s16 unkA;
- u8 unkC[4];
+ struct{
+ u32 bit31 : 4;
+ u32 bit27 : 3;
+ u32 bit24 : 2;
+ u32 bit22 : 2;
+ u32 pad_bit20 : 21;
+ }unkC;
s32 offsets[];
} BKSprite;
diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg
index a339b8fc..5a8e426d 100644
--- a/progress/progress_core2.svg
+++ b/progress/progress_core2.svg
@@ -17,7 +17,7 @@
core2
- 97.7054%
- 97.7054%
+ 97.8118%
+ 97.8118%
\ No newline at end of file
diff --git a/progress/progress_total.svg b/progress/progress_total.svg
index 023f0312..a12b4d34 100644
--- a/progress/progress_total.svg
+++ b/progress/progress_total.svg
@@ -17,7 +17,7 @@
Banjo-Kazooie (us.v10)
- 98.4559%
- 98.4559%
+ 98.5170%
+ 98.5170%
\ No newline at end of file
diff --git a/src/core2/code_A5BC0.c b/src/core2/code_A5BC0.c
index 3a8473fe..82aeacf4 100644
--- a/src/core2/code_A5BC0.c
+++ b/src/core2/code_A5BC0.c
@@ -54,7 +54,7 @@ s32 func_803327A8(s32 arg0);
void func_8032CD60(Prop *);
f32 func_8033A244(f32);
void func_8032F64C(f32 *pos, ActorMarker * marker);
-
+BKSprite *func_80330F50(ActorMarker * marker);
/* .data */
s32 D_8036E7B0 = 0;
@@ -160,20 +160,96 @@ void func_8032CB50(Cube *cube, bool global) {
}
}
+void func_8032CD60(Prop *prop) {
+ BKSprite *var_v0;
+ s32 sp48;
+ s32 sp44;
+ s32 sp40;
+ bool sp3C;
+ s32 sp38;
+ bool sp34;
+ bool sp30;
+ s32 sp2C;
+ bool var_t5;
+ s32 var_v1;
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_8032CD60.s")
-// void func_8032CD60(Prop *prop){
-// s32 tmp_v0;
-// if(prop->markerFlag){
-// tmp_v0 = func_80330F50(prop->actorProp.marker);
-// }
-// else{
-// tmp_v0 = func_8030A55C(prop->modelProp.unk0_31);
-// }
+ // if(prop->markerFlag){
+ var_v0 = ((u32)(((u16*)prop)[5]) & 1) ? func_80330F50(prop->actorProp.marker)
+ : func_8030A55C((u32)(((u16*)prop)[0]) >> 4);
+ if ((var_v0 != NULL) && ((var_v0->unkC.bit27 != 0))) {
+ sp48 = var_v0->unkC.bit31;
+ sp44 = var_v0->unkC.bit27;
+ sp40 = var_v0->unkC.bit24;
+ sp3C = var_v0->unkC.bit22;
+ sp38 = var_v0->frameCnt;
+ sp34 = (sp44 == 1) || (sp44 == 2U);
+ sp30 = (sp44 == 3) ? sp38 : (sp38 - sp34)*2;
-// if(tmp_v0 == 0) return;
+ sp2C = (s32)((((u32)(((u16*)prop)[5]) << 0x15) >> 0x1B) * sp30) / 32;
+ var_v1 = (((func_8023DB5C(sp34, sp30, prop, sp40) % (sp30 * sp48)) / sp48) + sp2C) % sp30;
+ var_t5 = 0;
+ switch (sp40) { /* irregular */
+ default:
+ sp40 = 0;
+ break;
+ case 1:
+ sp40 = (((((u32)(((u16*)prop)[5]) << 0x15) >> 0x1B) & 2)) ? 1 : 0;
+ break;
+ case 2:
+ sp40 = 1;
+ break;
+ case 3:
+ sp40 = (((u32)(((u16*)prop)[1]) << 0x1e) >> 0x1f);
+ break;
+ }
-// }
+ switch(sp44){
+ case 4:
+ var_t5 = sp38 <= var_v1;
+ case 1:
+ sp3C = sp38 <= var_v1;
+ break;
+ case 2:
+
+ var_t5 = sp38 <= var_v1;
+
+ default:
+
+ switch (sp3C) { /* switch 1; irregular */
+ case 1: /* switch 1 */
+ sp3C = ((((u32)(((u16*)prop)[5]) << 0x15) >> 0x1b) & 1) ? 1 : 0;
+ break;
+ case 2: /* switch 1 */
+ sp3C = 1;
+ break;
+ default: /* switch 1 */
+ if (((u32)(((u16*)prop)[5])) & 1) {
+ sp3C =(((u32)(((u32*)prop)[2]) << 0x1a) >> 0x1f);
+ } else {
+ sp3C = (((u32)(((u16*)prop)[1]) << 0x1e) >> 0x1f);
+ }
+ if (1);
+ break;
+ }
+ break;
+
+ }
+
+ if ((sp3C ^ sp40 ^ var_t5)) {
+ var_v1 = sp30 - var_v1;
+ }
+
+ var_v1 += (sp34) ? sp40 : -sp40;
+ var_v1 = (var_v1 < 0) ? var_v1 +sp38 : var_v1 % sp38;
+ prop->spriteProp.unk8_15 = var_v1;
+ if (((u32)(((u16*)prop)[5]) & 1)) {
+ prop->spriteProp.unk8_5 = sp3C;
+ }
+ else{
+ prop->spriteProp.unk0_1 = sp3C;
+ }
+ }
+}
void func_8032D120(Cube *cube){
if(cube->prop2Cnt >= 2)