diff --git a/src/800.c b/src/800.c index a84f39b27..d52f1bf58 100644 --- a/src/800.c +++ b/src/800.c @@ -5817,7 +5817,10 @@ s32 func_8001BFA0(void) { return D_80063074 & 0x1; } -INCLUDE_ASM("asm/nonmatchings/800", func_8001BFB0); +extern s32 D_80063074; +void func_8001BFB0(void) { + D_80063074++; +} INCLUDE_ASM("asm/nonmatchings/800", func_8001BFD0); @@ -6241,7 +6244,12 @@ void func_8001D130(s32 arg0, s32 arg1) { *(s32 *)(arg0 + arg1 * 4) &= 0x80FFFFFF; } -INCLUDE_ASM("asm/nonmatchings/800", func_8001D150); +s32 func_8001D150(s32 *arg0, s32 arg1) { + arg1 *= 4; + arg1 += (s32) arg0; + *(s32 *) arg1 |= 0x1000000; + return *(s32 *) arg1; +} INCLUDE_ASM("asm/nonmatchings/800", func_8001D16C); @@ -11709,7 +11717,11 @@ void func_8002C8F4(void) INCLUDE_ASM("asm/nonmatchings/800", func_8002CC4C); -INCLUDE_ASM("asm/nonmatchings/800", func_8002CCB4); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8002CCB4(void) { + func_8002D4C8(2, 0); +} INCLUDE_ASM("asm/nonmatchings/800", func_8002CCD8); diff --git a/src/800c3.c b/src/800c3.c index 02cdd169a..ad289cba4 100644 --- a/src/800c3.c +++ b/src/800c3.c @@ -186,7 +186,23 @@ INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D588); INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D6A0); -INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D6CC); +extern s32 *D_800729BC; +extern void (*D_80072984)(void); + +s32 func_8005D6CC(void) { + s32 *ptr = D_800729BC; + + if ((*(s32 *)((s8 *)ptr + 4) & 1) == 0) { + return 0; + } + if ((*ptr & 1) == 0) { + return 0; + } + if (D_80072984 != NULL) { + (*D_80072984)(); + } + return 1; +} INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D734); @@ -255,7 +271,28 @@ s32 func_8005E374(u8 *a0) { INCLUDE_ASM("asm/nonmatchings/800c3", func_8005E3AC); -INCLUDE_ASM("asm/nonmatchings/800c3", func_8005E480); +extern void func_8005EA68(void *arg0, s32 arg1); +extern void func_8005EA88(void *arg0, s32 arg1); +extern void func_8005EAA8(void *arg0, s32 arg1); +extern void func_8005EAC8(void); + +void func_8005E480(void *arg0) { + switch (*(u8 *)((s32)arg0 + 0x46)) { + case 2: + func_8005EA68(arg0, *(u8 *)((s32)arg0 + 0x47)); + break; + case 3: + func_8005EA88(arg0, *(u8 *)((s32)arg0 + 0x47)); + break; + case 4: + if (*(u8 *)((s32)arg0 + 0x48) == 0) { + func_8005EAA8(arg0, *(u8 *)((s32)arg0 + 0x47)); + } else { + func_8005EAC8(); + } + break; + } +} typedef struct Entry {