diff --git a/src/md_SC03_134/md_SC03_134.c b/src/md_SC03_134/md_SC03_134.c index c7784f720..e065646ae 100644 --- a/src/md_SC03_134/md_SC03_134.c +++ b/src/md_SC03_134/md_SC03_134.c @@ -323,7 +323,77 @@ INCLUDE_ASM("asm/md_SC03_134/nonmatchings/md_SC03_134", func_801E2F08); INCLUDE_ASM("asm/md_SC03_134/nonmatchings/md_SC03_134", func_801E303C); -INCLUDE_ASM("asm/md_SC03_134/nonmatchings/md_SC03_134", func_801E30EC); + +extern s32 func_8012BA10(s32 a0, s32 a1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012A828(s32 a0, s32 a1); +extern s32 func_801789AC(s32 a0); +extern void func_80178D18(s32 a0); + +void func_801E30EC(void *param_1) { + + extern s32 D_801E37E8[]; + extern s32 D_801E37DC[]; + extern s32 D_801E37F4[]; + + switch (*(s16 *)((s32)param_1 + 0xFC)) { + case 0: { + s32 v0 = func_8012BA10((s32)param_1, 0x10); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801E37E8[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 1: { + s32 v0 = func_8012BA10((s32)param_1, 0x10); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801E37DC[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 2: { + s32 v0 = func_8012B608(*(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12), 0x600, 8); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801E37DC[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 3: { + s32 cur = *(s32 *)((s32)param_1 + 0x90); + s32 target = D_801E37F4[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + } + + if (*(s16 *)((s32)param_1 + 0x70) == 0) { + if (func_801789AC((s32)param_1) != 0) { + func_80178D18((s32)param_1); + *(s16 *)((s32)param_1 + 0x70) = 2; + } + } +} + INCLUDE_ASM("asm/md_SC03_134/nonmatchings/md_SC03_134", func_801E3290); diff --git a/src/md_SC04_026/md_SC04_026.c b/src/md_SC04_026/md_SC04_026.c index 5f549c42a..de17456d0 100644 --- a/src/md_SC04_026/md_SC04_026.c +++ b/src/md_SC04_026/md_SC04_026.c @@ -329,7 +329,77 @@ INCLUDE_ASM("asm/md_SC04_026/nonmatchings/md_SC04_026", func_801E8470); INCLUDE_ASM("asm/md_SC04_026/nonmatchings/md_SC04_026", func_801E85A4); -INCLUDE_ASM("asm/md_SC04_026/nonmatchings/md_SC04_026", func_801E8654); + +extern s32 func_8012BA10(s32 a0, s32 a1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012A828(s32 a0, s32 a1); +extern s32 func_801789AC(s32 a0); +extern void func_80178D18(s32 a0); + +void func_801E8654(void *param_1) { + + extern s32 D_801E8D28[]; + extern s32 D_801E8D1C[]; + extern s32 D_801E8D34[]; + + switch (*(s16 *)((s32)param_1 + 0xFC)) { + case 0: { + s32 v0 = func_8012BA10((s32)param_1, 0x10); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801E8D28[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 1: { + s32 v0 = func_8012BA10((s32)param_1, 0x10); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801E8D1C[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 2: { + s32 v0 = func_8012B608(*(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12), 0x600, 8); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801E8D1C[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 3: { + s32 cur = *(s32 *)((s32)param_1 + 0x90); + s32 target = D_801E8D34[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + } + + if (*(s16 *)((s32)param_1 + 0x70) == 0) { + if (func_801789AC((s32)param_1) != 0) { + func_80178D18((s32)param_1); + *(s16 *)((s32)param_1 + 0x70) = 2; + } + } +} + INCLUDE_ASM("asm/md_SC04_026/nonmatchings/md_SC04_026", func_801E87F8); diff --git a/src/md_SC05_025/md_SC05_025.c b/src/md_SC05_025/md_SC05_025.c index a1bd5dfa8..b8f2b5c74 100644 --- a/src/md_SC05_025/md_SC05_025.c +++ b/src/md_SC05_025/md_SC05_025.c @@ -297,7 +297,77 @@ INCLUDE_ASM("asm/md_SC05_025/nonmatchings/md_SC05_025", func_801EE2F8); INCLUDE_ASM("asm/md_SC05_025/nonmatchings/md_SC05_025", func_801EE42C); -INCLUDE_ASM("asm/md_SC05_025/nonmatchings/md_SC05_025", func_801EE4DC); + +extern s32 func_8012BA10(s32 a0, s32 a1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012A828(s32 a0, s32 a1); +extern s32 func_801789AC(s32 a0); +extern void func_80178D18(s32 a0); + +void func_801EE4DC(void *param_1) { + + extern s32 D_801EEBB0[]; + extern s32 D_801EEBA4[]; + extern s32 D_801EEBBC[]; + + switch (*(s16 *)((s32)param_1 + 0xFC)) { + case 0: { + s32 v0 = func_8012BA10((s32)param_1, 0x10); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801EEBB0[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 1: { + s32 v0 = func_8012BA10((s32)param_1, 0x10); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801EEBA4[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 2: { + s32 v0 = func_8012B608(*(s16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12), 0x600, 8); + s32 cur; + s32 target; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) = + (*(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x12) + v0) & 0xFFF; + cur = *(s32 *)((s32)param_1 + 0x90); + target = D_801EEBA4[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + case 3: { + s32 cur = *(s32 *)((s32)param_1 + 0x90); + s32 target = D_801EEBBC[*(s16 *)((s32)param_1 + 0x70)]; + if (cur != target) { + func_8012A828((s32)param_1, target); + } + break; + } + } + + if (*(s16 *)((s32)param_1 + 0x70) == 0) { + if (func_801789AC((s32)param_1) != 0) { + func_80178D18((s32)param_1); + *(s16 *)((s32)param_1 + 0x70) = 2; + } + } +} + INCLUDE_ASM("asm/md_SC05_025/nonmatchings/md_SC05_025", func_801EE680);