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) {