diff --git a/include/structs.h b/include/structs.h
index 1844b49..24c6ff6 100644
--- a/include/structs.h
+++ b/include/structs.h
@@ -1509,55 +1509,71 @@ typedef struct {
typedef struct {
s32 unk0;
- s32 unk4;
- s32 unk8;
- s32 unkC;
+ u32 unk4;
+ f32 unk8;
+ f32 unkC;
s16 unk10;
s16 unk12;
- s32 unk14;
- s32 unk18;
- s32 unk1C;
- s32 unk20;
- s32 unk24;
- s32 unk28;
- s32 unk2C;
- s32 unk30;
- s32 unk34;
+ f32 unk14;
+ f32 unk18;
+ f32 unk1C;
+ f32 unk20;
+ f32 unk24;
+ f32 unk28;
+ f32 unk2C;
+ f32 unk30;
+ f32 unk34;
s32 unk38;
- s32 unk3C;
- s32 unk40;
- s32 unk44;
- s8 unk48[1]; // TODO: How many elements?
- s8 unk49;
- s8 unk4A;
- s8 unk4B;
- s32 unk4C;
- s32 unk50;
+ f32 unk3C;
+ s16 unk40;
+ s16 unk42;
+ s16 unk44[2];
+ u8 unk48[3];
+ s8 unk4B[3];
+ s8 unk4E;
+ s8 unk4F;
+ s8 unk50;
+ s8 unk51;
+ s8 unk52;
+ s8 unk53;
s8 unk54;
s8 unk55;
s8 unk56;
s8 unk57;
s32 unk58;
- s32 unk5C;
+ u8 unk5C;
+ u8 unk5D;
+ u8 unk5E;
+ u8 unk5F;
u8 unk60;
u8 unk61;
- u8 unk62;
- u8 unk63;
+ s16 unk62;
s16 unk64;
- s16 unk66;
+ u8 unk66;
+ u8 unk67;
s32 unk68;
- s32 unk6C;
- s32 unk70;
- s32 unk74;
- s32 unk78;
- s32 unk7C;
- s32 unk80;
- s32 unk84;
- s32 unk88;
- s32 unk8C;
- s32 unk90;
+ s16 unk6C;
+ s8 unk6E;
+ s8 unk6F;
+ s8 unk70;
+ s8 unk71;
+ u8 unk72;
+ u8 unk73;
+ f32 unk74;
+ f32 unk78;
+ f32 unk7C;
+ s16 unk80;
+ s16 unk82;
+ u16 unk84;
+ u16 unk86;
+ s16 unk88;
+ u16 unk8A;
+ f32 unk8C;
+ f32 unk90;
s32 unk94;
- s32 unk98;
+ s16 unk98;
+ s8 unk9A;
+ s8 unk9B;
s32 unk9C;
s32 unkA0;
} OM2_unk7C;
diff --git a/progress/progress.global_asm.csv b/progress/progress.global_asm.csv
index 71f9f14..4c13770 100644
--- a/progress/progress.global_asm.csv
+++ b/progress/progress.global_asm.csv
@@ -549,7 +549,7 @@ us,.code,func_806F142C,112,yes
us,.code,func_8063CE64,168,yes
us,.code,func_80728300,1308,no
us,.code,func_8066ACA4,252,no
-us,.code,func_806419F8,128,no
+us,.code,func_806419F8,128,yes
us,.code,func_8060A9BC,72,no
us,.code,func_806A4DDC,920,no
us,.code,func_8069E040,72,yes
@@ -2523,7 +2523,7 @@ us,.code,func_8067E704,32,yes
us,.code,func_8071DB74,284,yes
us,.code,func_806C8EE8,164,yes
us,.code,func_806F0238,68,yes
-us,.code,func_8063DED0,284,no
+us,.code,func_8063DED0,284,yes
us,.code,func_805FE398,316,no
us,.code,func_807131BC,96,yes
us,.code,func_8062D2F0,244,no
@@ -2990,7 +2990,7 @@ us,.code,func_806D2954,192,yes
us,.code,func_8068BA2C,460,yes
us,.code,func_80689FEC,136,yes
us,.code,func_806FACE8,764,no
-us,.code,func_8063E078,92,no
+us,.code,func_8063E078,92,yes
us,.code,func_80738080,76,no
us,.code,func_806E6E7C,100,yes
us,.code,func_8067680C,412,no
diff --git a/progress/progress.total.csv b/progress/progress.total.csv
index c7f8fd0..55465bc 100644
--- a/progress/progress.total.csv
+++ b/progress/progress.total.csv
@@ -549,7 +549,7 @@ us,.code,func_806F142C,112,yes
us,.code,func_8063CE64,168,yes
us,.code,func_80728300,1308,no
us,.code,func_8066ACA4,252,no
-us,.code,func_806419F8,128,no
+us,.code,func_806419F8,128,yes
us,.code,func_8060A9BC,72,no
us,.code,func_806A4DDC,920,no
us,.code,func_8069E040,72,yes
@@ -2523,7 +2523,7 @@ us,.code,func_8067E704,32,yes
us,.code,func_8071DB74,284,yes
us,.code,func_806C8EE8,164,yes
us,.code,func_806F0238,68,yes
-us,.code,func_8063DED0,284,no
+us,.code,func_8063DED0,284,yes
us,.code,func_805FE398,316,no
us,.code,func_807131BC,96,yes
us,.code,func_8062D2F0,244,no
@@ -2990,7 +2990,7 @@ us,.code,func_806D2954,192,yes
us,.code,func_8068BA2C,460,yes
us,.code,func_80689FEC,136,yes
us,.code,func_806FACE8,764,no
-us,.code,func_8063E078,92,no
+us,.code,func_8063E078,92,yes
us,.code,func_80738080,76,no
us,.code,func_806E6E7C,100,yes
us,.code,func_8067680C,412,no
diff --git a/progress/progress_global_asm.svg b/progress/progress_global_asm.svg
index 7c6a7e5..1f0110e 100644
--- a/progress/progress_global_asm.svg
+++ b/progress/progress_global_asm.svg
@@ -17,7 +17,7 @@
global_asm
- 26.4889%
- 26.4889%
+ 26.5298%
+ 26.5298%
diff --git a/progress/progress_total.svg b/progress/progress_total.svg
index 9ea39c9..082e798 100644
--- a/progress/progress_total.svg
+++ b/progress/progress_total.svg
@@ -9,7 +9,7 @@
-
+
@@ -17,7 +17,7 @@
Donkey Kong 64 (US)
- 26.4228%
- 26.4228%
+ 26.4534%
+ 26.4534%
diff --git a/src/global_asm/code_42630.c b/src/global_asm/code_42630.c
index 302d9a9..caa0e44 100644
--- a/src/global_asm/code_42630.c
+++ b/src/global_asm/code_42630.c
@@ -170,8 +170,71 @@ void func_8063DE68(Struct8063DE68_arg0 *arg0) {
func_8061130C(arg0); // Heap Something
}
-// Probably initting a struct, easy way to figure out the shape
-#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_8063DED0.s")
+void func_8063DED0(OM2_unk7C *arg0) {
+ s32 i = 0;
+ f32 *temp = arg0;
+
+ // TODO: Hmm...
+ while (i < 8) {
+ temp[6] = 1.0f;
+ temp[7] = 1.0f;
+ temp[8] = 1.0f;
+ temp += 4;
+ temp[1] = 1.0f;
+ i += 4;
+ }
+ arg0->unk10 = -1;
+ arg0->unk12 = -1;
+ arg0->unk38 = -1;
+ arg0->unk0 = 0;
+ arg0->unk40 = 0;
+ arg0->unk42 = 0;
+ arg0->unk44[0] = 0;
+ arg0->unk44[1] = 0;
+ arg0->unk48[0] = 0;
+ arg0->unk48[1] = 0;
+ arg0->unk48[2] = 0;
+ arg0->unk4B[0] = 0;
+ arg0->unk4B[1] = 0;
+ arg0->unk4B[2] = 0;
+ arg0->unk4E = 0;
+ arg0->unk4F = 0;
+ arg0->unk50 = 0;
+ arg0->unk51 = 0;
+ arg0->unk52 = 0;
+ arg0->unk53 = 0;
+ arg0->unk80 = 0;
+ arg0->unk82 = 0;
+ arg0->unk84 = 0x7FFF;
+ arg0->unk86 = 0x7FFF;
+ arg0->unk88 = 0;
+ arg0->unk8A = 0xFFF;
+ arg0->unk94 = 0;
+ arg0->unk54 = 0;
+ arg0->unk5C = 0;
+ arg0->unk67 = 0;
+ arg0->unk6E = 1;
+ arg0->unk6F = 0;
+ arg0->unk62 = 0;
+ arg0->unk64 = 0;
+ arg0->unk60 = 0;
+ arg0->unk66 = 0xFF;
+ arg0->unk70 = 1;
+ arg0->unk71 = 1;
+ arg0->unk9A = 0;
+ arg0->unk9B = 0;
+ arg0->unk98 = 0;
+ arg0->unk4 = -1;
+ arg0->unk8 = 0.0f;
+ arg0->unkC = 0.0f;
+ arg0->unk34 = 0.0f;
+ arg0->unk3C = 0.0f;
+ arg0->unk74 = 0.0f;
+ arg0->unk78 = 0.0f;
+ arg0->unk7C = 0.0f;
+ arg0->unk8C = 0.0f;
+ arg0->unk90 = 0.0f;
+}
void func_8063DFEC(s32 arg0, void *arg1) {
s16 temp_v0;
@@ -183,7 +246,19 @@ void func_8063DFEC(s32 arg0, void *arg1) {
}
}
-#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_8063E078.s")
+void func_8063E078(OM2_unk7C *arg0) {
+ u8 i;
+
+ for (i = 0; i < 2; i++) {
+ if (arg0->unk44[i] != 0) {
+ arg0->unk44[i]--;
+ }
+ }
+ for (i = 0; i < 3; i++) {
+ arg0->unk4B[i] = arg0->unk48[i];
+ }
+ arg0->unk4E = 0;
+}
#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_8063E0D4.s")
@@ -265,55 +340,39 @@ void func_8064199C(Struct8064199C_arg0 *arg0, s8 arg1, s16 arg2) {
}
}
-#pragma GLOBAL_ASM("asm/nonmatchings/global_asm/code_42630/func_806419F8.s")
-
-/*
-// TODO: Likely needs to be split into switch cases
+// TODO: Get rid of GOTOs
s32 func_806419F8(void) {
- CharacterChange *temp_v1;
- s16 temp_a1;
- temp_v1 = &character_change_array[0];
+ PlayerAdditionalActorData *PaaD = character_change_array->player_pointer->PaaD;
- if (
- ((player_pointer->control_state == 0x42) && ((temp_a1 = temp_v1->player_pointer->PaaD->unkBC, (temp_a1 == 0x62)) || (temp_a1 == 0x88) || (temp_a1 == 0x17)))
- || (player_pointer->control_state == 0x52)
- || (player_pointer->control_state == 0x67)
- || ((temp_v1->action_initiated == 0x1C)) || (temp_v1->action_initiated == 0x53)) {
- return 0;
+ if (player_pointer->control_state == 0x42) {
+ if (PaaD->unkBC == 0x62 || PaaD->unkBC == 0x88 || PaaD->unkBC == 0x17) {
+ goto block_8;
+ }
}
+ if (player_pointer->control_state == 0x52 || player_pointer->control_state == 0x67) {
+ goto block_8;
+ }
+ if (character_change_array->action_initiated == 0x1C) {
+ goto block_8;
+ }
+ if (character_change_array->action_initiated != 0x53) {
+ goto block_9;
+ }
+block_8:
+ return 0;
+block_9:
return 1;
-
- // TODO: aaa
- // switch (player_pointer->control_state) {
- // case 0x42:
- // switch (character_change_array[0].player_pointer->PaaD->unkBC) {
- // case 0x62:
- // case 0x88:
- // case 0x17:
- // return 0;
- // }
- // break;
- // case 0x52:
- // case 0x67:
- // return 0;
- // }
- // switch (character_change_array[0].action_initiated) {
- // case 0x1C:
- // case 0x53:
- // return 0;
- // }
}
-*/
extern u8 D_807F6938;
extern s16 D_807F6918[];
// TODO: This does match but the types on the externs are sus
void func_80641A78(void) {
- s32 phi_s0;
+ s32 i;
- for (phi_s0 = 0; phi_s0 < D_807F6938; phi_s0++) {
- func_806355DC(D_807F6240[D_807F6918[phi_s0]], 1);
+ for (i = 0; i < D_807F6938; i++) {
+ func_806355DC(D_807F6240[D_807F6918[i]], 1);
}
}
diff --git a/src/global_asm/code_CEAE0.c b/src/global_asm/code_CEAE0.c
index ac187db..c2a7b73 100644
--- a/src/global_asm/code_CEAE0.c
+++ b/src/global_asm/code_CEAE0.c
@@ -7850,8 +7850,7 @@ void func_806E9B3C(void) {
/*
// TODO: Regalloc
void func_806E9BA8(s32 arg0) {
- s32 temp = cc_player_index;
- if ((D_807FD610[temp].unk2C & B_BUTTON) && !(extra_player_info_pointer->unk1F0 & 0x8000) && func_806F8AD4(6, temp) > 0) {
+ if ((D_807FD610[cc_player_index].unk2C & B_BUTTON) && !(extra_player_info_pointer->unk1F0 & 0x8000) && func_806F8AD4(6, cc_player_index) > 0) {
playSound(0x263, 0x7FFF, 63.0f, 1.0f, 0xA, 0);
current_actor_pointer->control_state = arg0;
current_actor_pointer->control_state_progress = 0;
diff --git a/src/multiplayer/code_0.c b/src/multiplayer/code_0.c
index ad4b4e4..a24b4d9 100644
--- a/src/multiplayer/code_0.c
+++ b/src/multiplayer/code_0.c
@@ -274,7 +274,6 @@ void func_800268C0(u8 arg0) {
}
void func_806F0C18(Actor*);
-void func_806F91B4(s32, u8, s16);
extern s32 D_807552E8;
void func_800268DC(Actor *arg0, PlayerAdditionalActorData *arg1, PlayerProgress *arg2) {