From 49cf2dc15a39ae0d533b0ce25ffa58b0194b6b68 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 12 Aug 2026 22:56:40 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20worker=20gate=20=E2=80=94=20+1?= =?UTF-8?q?=20fns=20x17=20propagated=20(fleet=2095.1%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/dedup.us.yaml | 119 ++++ src/ov_SC02_027/ov_SC02_027_jr_8017AE2C.c | 362 +----------- src/ov_SC02_027/ov_SC02_027_jr_8017D898.c | 18 +- src/ov_SC02_028/ov_SC02_028_jr_8017AE2C.c | 347 +---------- src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.c | 333 +---------- src/ov_SC03_091/ov_SC03_091_jr_8017AE2C.c | 364 +----------- src/ov_SC03_093/ov_SC03_093_jr_8017AE2C.c | 364 +----------- src/ov_SC03_097/ov_SC03_097_jr_8017AE2C.c | 347 +---------- src/ov_SC03_098/ov_SC03_098_jr_8017AE2C.c | 364 +----------- src/ov_SC03_100/ov_SC03_100_jr_8017AE2C.c | 364 +----------- src/ov_SC03_110/ov_SC03_110_jr_8017AE2C.c | 364 +----------- src/shared/engine_core.h | 688 ++++++++++++++++++++++ 12 files changed, 972 insertions(+), 3062 deletions(-) diff --git a/config/dedup.us.yaml b/config/dedup.us.yaml index f8a041782d..890d883c97 100644 --- a/config/dedup.us.yaml +++ b/config/dedup.us.yaml @@ -14089,3 +14089,122 @@ groups: func: DEFINE_func_8017BEBC vram: 0x8017BEBC binaries: [ov_SC03_002, ov_SC02_026, ov_SC02_031, ov_SC03_031, ov_SC03_109, ov_SC03_125, ov_SC04_020, ov_SC05_018] + - id: E_func_8017CCD4 + tier: h_exact + hash: 17211c2c3e65eb680824fdef879059ac8e874961 + source: src/shared/engine_core.h + func: DEFINE_func_8017CCD4 + vram: 0x8017CCD4 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017C8F4 + tier: h_exact + hash: c080143662be590dc93be09f1af7af76b7b4a31d + source: src/shared/engine_core.h + func: DEFINE_func_8017C8F4 + vram: 0x8017C8F4 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017CFE4 + tier: h_exact + hash: 5b6b968251699b8e8314523e396805478a91da13 + source: src/shared/engine_core.h + func: DEFINE_func_8017CFE4 + vram: 0x8017CFE4 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110] + - id: E_func_8017CD4C + tier: h_exact + hash: 952c5c0012f6262becea180927e6a8dcd0bc3319 + source: src/shared/engine_core.h + func: DEFINE_func_8017CD4C + vram: 0x8017CD4C + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017CC80 + tier: h_exact + hash: 229aadd9583562d24ab81a07b37caede7608faec + source: src/shared/engine_core.h + func: DEFINE_func_8017CC80 + vram: 0x8017CC80 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017D588 + tier: h_exact + hash: 3a43941d56d4b1c4f91f53f047f7887fdc66807e + source: src/shared/engine_core.h + func: DEFINE_func_8017D588 + vram: 0x8017D588 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110] + - id: E_func_8017CD9C + tier: h_exact + hash: 85f5930d17fd84458d213ac6a2ff6c3177a59a86 + source: src/shared/engine_core.h + func: DEFINE_func_8017CD9C + vram: 0x8017CD9C + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017D6CC + tier: h_exact + hash: 86843ed5657f959adb66e55897f923080d5e9be1 + source: src/shared/engine_core.h + func: DEFINE_func_8017D6CC + vram: 0x8017D6CC + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110] + - id: E_func_8017CB68 + tier: h_exact + hash: 2b90244a0dab0aa71d940ea284aad9198427d06c + source: src/shared/engine_core.h + func: DEFINE_func_8017CB68 + vram: 0x8017CB68 + binaries: [ov_SC02_027, ov_SC03_091, ov_SC03_093, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017D3B8 + tier: h_exact + hash: 55df41346db0267efda23040cee881925156cf8c + source: src/shared/engine_core.h + func: DEFINE_func_8017D3B8 + vram: 0x8017D3B8 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017CA34 + tier: h_exact + hash: 0dc7d970a3a5f0c07a97a9d6b3adcb5c89a4256a + source: src/shared/engine_core.h + func: DEFINE_func_8017CA34 + vram: 0x8017CA34 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017CDF8 + tier: h_exact + hash: 6241b634feb84f6823243646e106064fa1e4c35e + source: src/shared/engine_core.h + func: DEFINE_func_8017CDF8 + vram: 0x8017CDF8 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017CBD4 + tier: h_exact + hash: 6f36e21360745ace5cf7bac505d8e0b1e1fade49 + source: src/shared/engine_core.h + func: DEFINE_func_8017CBD4 + vram: 0x8017CBD4 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017CAB4 + tier: h_exact + hash: efc4ec9f7e8517127b412adde7053cf64525b98a + source: src/shared/engine_core.h + func: DEFINE_func_8017CAB4 + vram: 0x8017CAB4 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017D618 + tier: h_exact + hash: 744f54516fb92a3684341cf33ad33c3222ef12e6 + source: src/shared/engine_core.h + func: DEFINE_func_8017D618 + vram: 0x8017D618 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017D4B4 + tier: h_exact + hash: 7ab6a3b952530b8fa1d170302beef5724df40c82 + source: src/shared/engine_core.h + func: DEFINE_func_8017D4B4 + vram: 0x8017D4B4 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] + - id: E_func_8017C940 + tier: h_exact + hash: ac2eda3f6a38a59aea0bff4caf2353f2b9d16392 + source: src/shared/engine_core.h + func: DEFINE_func_8017C940 + vram: 0x8017C940 + binaries: [ov_SC02_027, ov_SC02_028, ov_SC03_091, ov_SC03_093, ov_SC03_097, ov_SC03_098, ov_SC03_100, ov_SC03_110, ov_SC02_037] diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8017AE2C.c b/src/ov_SC02_027/ov_SC02_027_jr_8017AE2C.c index bfd72addd5..c1a1d852b5 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8017AE2C.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8017AE2C.c @@ -3822,192 +3822,31 @@ void func_8017C8B8(void *a0) { } -extern s32 D_80126B58; -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - -extern u16 D_801152BA; -extern s16 D_80115214; - -void func_8017C940(void *a0) { - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ -extern s32 func_80178B18(s32 param_1, s32 param_2); - -void func_8017CB68(s32 a0) { - s32 ptr1 = *(s32 *)(a0 + 0xD0); - s32 ptr2 = *(s32 *)(a0 + 0xDC); - s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; - - *(s16 *)(ptr1 + 0x1A) = val; - *(s16 *)(ptr1 + 0x18) = val; - - if (val < 0) { - *(s16 *)(ptr1 + 0x0) = 0; - func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); - *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; - } -} +DEFINE_func_8017CB68() /* dedup: shared engine-core @0x8017CB68 (src/shared) */ -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -4018,37 +3857,14 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -4060,26 +3876,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ @@ -4098,19 +3895,7 @@ void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) DEFINE_func_8017CE7C() /* dedup: shared engine-core @0x8017CE7C (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017CFE4(int param_1) -{ - unsigned short uVar1; - uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; - *(unsigned short *)(param_1 + 0x12) = uVar1; - if ((short)uVar1 > 0) { - func_8017D030(param_1); - } else { - ((void (*)(int))func_80146C3C)(param_1); - } -} +DEFINE_func_8017CFE4() /* dedup: shared engine-core @0x8017CFE4 (src/shared) */ @@ -4237,26 +4022,7 @@ DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ @@ -4269,57 +4035,10 @@ DEFINE_func_8017D428() /* dedup: shared engine-core @0x8017D428 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017D588(void *a0) -{ - void *obj; - s16 v; - v = *(u16 *)((s32)a0 + 0x12) - 0x100; - obj = *(void **)((s32)a0 + 0x34); - *(s16 *)((s32)a0 + 0x12) = v; - if (v > 0) { - ((void (*)(void *))func_8017D030)(a0); - } else { - *(s16 *)((s32)obj + 0x64) = 0x1000; - *(s16 *)((s32)obj + 0x62) = 0x1000; - *(s16 *)((s32)obj + 0x60) = 0x1000; - func_80146C3C(); - } -} +DEFINE_func_8017D588() /* dedup: shared engine-core @0x8017D588 (src/shared) */ @@ -4361,57 +4080,10 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ -extern void func_800D22E4(s32 a0); -extern void func_80146C3C(void); -extern void func_8017D728(void *a0); -void func_8017D6CC(void *a0) -{ - s32 t; - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0xA) { - ((void (*)(void))func_800D22E4)(); - func_8017D728(a0); - } else { - ((void (*)(void *))func_80146C3C)(a0); - } -} +DEFINE_func_8017D6CC() /* dedup: shared engine-core @0x8017D6CC (src/shared) */ diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8017D898.c b/src/ov_SC02_027/ov_SC02_027_jr_8017D898.c index 98d41e0f09..518f254434 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8017D898.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8017D898.c @@ -3201,7 +3201,23 @@ void func_8017E7B8(void) } -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8017D898", func_8017E7F8); + +extern int func_8017FAB0(int param_1); + +void func_8017E7F8(void) +{ + + extern u8 D_8018F9A4[]; + extern u8 D_8018FAF8[]; + extern u8 *D_801274C8; + extern void *D_801274CC; + extern u8 *D_801151D8; + D_801274C8 = D_8018F9A4; + D_801274CC = D_8018FAF8; + func_8017FAB0(2); + D_801151D8 = (u8 *)0x1; +} + extern int func_8017FAB0(int param_1); diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8017AE2C.c b/src/ov_SC02_028/ov_SC02_028_jr_8017AE2C.c index 41972c9be5..0f89c1a4bb 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_8017AE2C.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_8017AE2C.c @@ -3832,135 +3832,21 @@ void func_8017C8B8(void *a0) { -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - - extern s32 D_80126B58; - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - - -void func_8017C940(void *a0) { - - extern u16 D_801152BA; - extern s16 D_80115214; - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ @@ -3985,26 +3871,7 @@ void func_8017CB68(s32 a0) { -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ @@ -4012,25 +3879,10 @@ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -4041,37 +3893,14 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -4083,26 +3912,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ @@ -4121,19 +3931,7 @@ void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) DEFINE_func_8017CE7C() /* dedup: shared engine-core @0x8017CE7C (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017CFE4(int param_1) -{ - unsigned short uVar1; - uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; - *(unsigned short *)(param_1 + 0x12) = uVar1; - if ((short)uVar1 > 0) { - func_8017D030(param_1); - } else { - ((void (*)(int))func_80146C3C)(param_1); - } -} +DEFINE_func_8017CFE4() /* dedup: shared engine-core @0x8017CFE4 (src/shared) */ @@ -4260,26 +4058,7 @@ DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ @@ -4292,57 +4071,10 @@ DEFINE_func_8017D428() /* dedup: shared engine-core @0x8017D428 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017D588(void *a0) -{ - void *obj; - s16 v; - v = *(u16 *)((s32)a0 + 0x12) - 0x100; - obj = *(void **)((s32)a0 + 0x34); - *(s16 *)((s32)a0 + 0x12) = v; - if (v > 0) { - ((void (*)(void *))func_8017D030)(a0); - } else { - *(s16 *)((s32)obj + 0x64) = 0x1000; - *(s16 *)((s32)obj + 0x62) = 0x1000; - *(s16 *)((s32)obj + 0x60) = 0x1000; - func_80146C3C(); - } -} +DEFINE_func_8017D588() /* dedup: shared engine-core @0x8017D588 (src/shared) */ @@ -4384,57 +4116,10 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ -extern void func_800D22E4(s32 a0); -extern void func_80146C3C(void); -extern void func_8017D728(void *a0); -void func_8017D6CC(void *a0) -{ - s32 t; - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0xA) { - ((void (*)(void))func_800D22E4)(); - func_8017D728(a0); - } else { - ((void (*)(void *))func_80146C3C)(a0); - } -} +DEFINE_func_8017D6CC() /* dedup: shared engine-core @0x8017D6CC (src/shared) */ diff --git a/src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.c b/src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.c index 3a9148c318..ce06666ff3 100644 --- a/src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.c +++ b/src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.c @@ -4941,218 +4941,50 @@ void func_8017C8B8(void *a0) { -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - - extern s32 D_80126B58; - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - - -void func_8017C940(void *a0) { - - extern u16 D_801152BA; - extern s16 D_80115214; - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ -extern s32 func_80178B18(s32 param_1, s32 param_2); - -void func_8017CB68(s32 a0) { - s32 ptr1 = *(s32 *)(a0 + 0xD0); - s32 ptr2 = *(s32 *)(a0 + 0xDC); - s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; - - *(s16 *)(ptr1 + 0x1A) = val; - *(s16 *)(ptr1 + 0x18) = val; - - if (val < 0) { - *(s16 *)(ptr1 + 0x0) = 0; - func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); - *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; - } -} +DEFINE_func_8017CB68() /* dedup: shared engine-core @0x8017CB68 (src/shared) */ -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -extern void func_8017BEBC(s32 a0, s32 a1); +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ - - -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} - - -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -5164,14 +4996,7 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ @@ -5179,23 +5004,7 @@ void func_8017CD4C(void *a0) // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -5207,26 +5016,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ typedef struct { @@ -5385,39 +5175,7 @@ void func_8017D33C(void *a0) { DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ -extern void func_8017C560(void *a0); - -/* func_8017D3B8 — a state-tick: bump the frame counter at 0x1C; while it is - * below 0xC spin the angle at 0x12 by 0xE0, otherwise reset the counter, zero - * the vector at *(0x34)+0x60/0x64, set +0x62 to 0x3000 and advance the state - * word at 0x02. Falls through to ((void (*)(void *))func_8017D030)(a0) on both arms (the target - * leaves $a0 untouched, so the call needs no move). - * - * §71 sibling-first: func_8017C560 (same TU, 4 bytes earlier) is the same - * `*(u16 *)(a0 + 2) += 1` idiom, and func_8017D030's own prologue reads - * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. - */ - -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ void func_80147324(s32 arg0); @@ -5441,37 +5199,7 @@ typedef struct { * bumps the state word at +0x2, then tail-calls the shared advance helper. * §3-T4: target is `slti 0x20 ; beqz else` => `if (t < 0x20) { then } else { reset }`. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8017AE2C", func_8017D588); @@ -5516,40 +5244,7 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ void func_800D22E4(s32 a0); diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8017AE2C.c b/src/ov_SC03_091/ov_SC03_091_jr_8017AE2C.c index 369c48fd36..4126b15122 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8017AE2C.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8017AE2C.c @@ -3832,179 +3832,31 @@ void func_8017C8B8(void *a0) { -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - - extern s32 D_80126B58; - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - - -void func_8017C940(void *a0) { - - extern u16 D_801152BA; - extern s16 D_80115214; - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ -extern s32 func_80178B18(s32 param_1, s32 param_2); - -void func_8017CB68(s32 a0) { - s32 ptr1 = *(s32 *)(a0 + 0xD0); - s32 ptr2 = *(s32 *)(a0 + 0xDC); - s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; - - *(s16 *)(ptr1 + 0x1A) = val; - *(s16 *)(ptr1 + 0x18) = val; - - if (val < 0) { - *(s16 *)(ptr1 + 0x0) = 0; - func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); - *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; - } -} +DEFINE_func_8017CB68() /* dedup: shared engine-core @0x8017CB68 (src/shared) */ -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ @@ -4012,25 +3864,10 @@ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -4041,37 +3878,14 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -4083,26 +3897,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ @@ -4121,19 +3916,7 @@ void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) DEFINE_func_8017CE7C() /* dedup: shared engine-core @0x8017CE7C (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017CFE4(int param_1) -{ - unsigned short uVar1; - uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; - *(unsigned short *)(param_1 + 0x12) = uVar1; - if ((short)uVar1 > 0) { - func_8017D030(param_1); - } else { - ((void (*)(int))func_80146C3C)(param_1); - } -} +DEFINE_func_8017CFE4() /* dedup: shared engine-core @0x8017CFE4 (src/shared) */ @@ -4260,26 +4043,7 @@ DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ @@ -4292,57 +4056,10 @@ DEFINE_func_8017D428() /* dedup: shared engine-core @0x8017D428 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017D588(void *a0) -{ - void *obj; - s16 v; - v = *(u16 *)((s32)a0 + 0x12) - 0x100; - obj = *(void **)((s32)a0 + 0x34); - *(s16 *)((s32)a0 + 0x12) = v; - if (v > 0) { - ((void (*)(void *))func_8017D030)(a0); - } else { - *(s16 *)((s32)obj + 0x64) = 0x1000; - *(s16 *)((s32)obj + 0x62) = 0x1000; - *(s16 *)((s32)obj + 0x60) = 0x1000; - func_80146C3C(); - } -} +DEFINE_func_8017D588() /* dedup: shared engine-core @0x8017D588 (src/shared) */ @@ -4384,57 +4101,10 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ -extern void func_800D22E4(s32 a0); -extern void func_80146C3C(void); -extern void func_8017D728(void *a0); -void func_8017D6CC(void *a0) -{ - s32 t; - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0xA) { - ((void (*)(void))func_800D22E4)(); - func_8017D728(a0); - } else { - ((void (*)(void *))func_80146C3C)(a0); - } -} +DEFINE_func_8017D6CC() /* dedup: shared engine-core @0x8017D6CC (src/shared) */ diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8017AE2C.c b/src/ov_SC03_093/ov_SC03_093_jr_8017AE2C.c index 86edc1f71e..9e55663bdb 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_8017AE2C.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_8017AE2C.c @@ -3832,179 +3832,31 @@ void func_8017C8B8(void *a0) { -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - - extern s32 D_80126B58; - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - - -void func_8017C940(void *a0) { - - extern u16 D_801152BA; - extern s16 D_80115214; - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ -extern s32 func_80178B18(s32 param_1, s32 param_2); - -void func_8017CB68(s32 a0) { - s32 ptr1 = *(s32 *)(a0 + 0xD0); - s32 ptr2 = *(s32 *)(a0 + 0xDC); - s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; - - *(s16 *)(ptr1 + 0x1A) = val; - *(s16 *)(ptr1 + 0x18) = val; - - if (val < 0) { - *(s16 *)(ptr1 + 0x0) = 0; - func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); - *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; - } -} +DEFINE_func_8017CB68() /* dedup: shared engine-core @0x8017CB68 (src/shared) */ -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ @@ -4012,25 +3864,10 @@ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -4041,37 +3878,14 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -4083,26 +3897,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ @@ -4121,19 +3916,7 @@ void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) DEFINE_func_8017CE7C() /* dedup: shared engine-core @0x8017CE7C (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017CFE4(int param_1) -{ - unsigned short uVar1; - uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; - *(unsigned short *)(param_1 + 0x12) = uVar1; - if ((short)uVar1 > 0) { - func_8017D030(param_1); - } else { - ((void (*)(int))func_80146C3C)(param_1); - } -} +DEFINE_func_8017CFE4() /* dedup: shared engine-core @0x8017CFE4 (src/shared) */ @@ -4260,26 +4043,7 @@ DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ @@ -4292,57 +4056,10 @@ DEFINE_func_8017D428() /* dedup: shared engine-core @0x8017D428 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017D588(void *a0) -{ - void *obj; - s16 v; - v = *(u16 *)((s32)a0 + 0x12) - 0x100; - obj = *(void **)((s32)a0 + 0x34); - *(s16 *)((s32)a0 + 0x12) = v; - if (v > 0) { - ((void (*)(void *))func_8017D030)(a0); - } else { - *(s16 *)((s32)obj + 0x64) = 0x1000; - *(s16 *)((s32)obj + 0x62) = 0x1000; - *(s16 *)((s32)obj + 0x60) = 0x1000; - func_80146C3C(); - } -} +DEFINE_func_8017D588() /* dedup: shared engine-core @0x8017D588 (src/shared) */ @@ -4384,57 +4101,10 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ -extern void func_800D22E4(s32 a0); -extern void func_80146C3C(void); -extern void func_8017D728(void *a0); -void func_8017D6CC(void *a0) -{ - s32 t; - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0xA) { - ((void (*)(void))func_800D22E4)(); - func_8017D728(a0); - } else { - ((void (*)(void *))func_80146C3C)(a0); - } -} +DEFINE_func_8017D6CC() /* dedup: shared engine-core @0x8017D6CC (src/shared) */ diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8017AE2C.c b/src/ov_SC03_097/ov_SC03_097_jr_8017AE2C.c index 4907ad35a5..eb91768d78 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8017AE2C.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8017AE2C.c @@ -3832,135 +3832,21 @@ void func_8017C8B8(void *a0) { -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - - extern s32 D_80126B58; - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - - -void func_8017C940(void *a0) { - - extern u16 D_801152BA; - extern s16 D_80115214; - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ @@ -3985,26 +3871,7 @@ void func_8017CB68(s32 a0) { -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ @@ -4012,25 +3879,10 @@ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -4041,37 +3893,14 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -4083,26 +3912,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ @@ -4121,19 +3931,7 @@ void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) DEFINE_func_8017CE7C() /* dedup: shared engine-core @0x8017CE7C (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017CFE4(int param_1) -{ - unsigned short uVar1; - uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; - *(unsigned short *)(param_1 + 0x12) = uVar1; - if ((short)uVar1 > 0) { - func_8017D030(param_1); - } else { - ((void (*)(int))func_80146C3C)(param_1); - } -} +DEFINE_func_8017CFE4() /* dedup: shared engine-core @0x8017CFE4 (src/shared) */ @@ -4260,26 +4058,7 @@ DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ @@ -4292,57 +4071,10 @@ DEFINE_func_8017D428() /* dedup: shared engine-core @0x8017D428 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017D588(void *a0) -{ - void *obj; - s16 v; - v = *(u16 *)((s32)a0 + 0x12) - 0x100; - obj = *(void **)((s32)a0 + 0x34); - *(s16 *)((s32)a0 + 0x12) = v; - if (v > 0) { - ((void (*)(void *))func_8017D030)(a0); - } else { - *(s16 *)((s32)obj + 0x64) = 0x1000; - *(s16 *)((s32)obj + 0x62) = 0x1000; - *(s16 *)((s32)obj + 0x60) = 0x1000; - func_80146C3C(); - } -} +DEFINE_func_8017D588() /* dedup: shared engine-core @0x8017D588 (src/shared) */ @@ -4384,57 +4116,10 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ -extern void func_800D22E4(s32 a0); -extern void func_80146C3C(void); -extern void func_8017D728(void *a0); -void func_8017D6CC(void *a0) -{ - s32 t; - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0xA) { - ((void (*)(void))func_800D22E4)(); - func_8017D728(a0); - } else { - ((void (*)(void *))func_80146C3C)(a0); - } -} +DEFINE_func_8017D6CC() /* dedup: shared engine-core @0x8017D6CC (src/shared) */ diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8017AE2C.c b/src/ov_SC03_098/ov_SC03_098_jr_8017AE2C.c index 0a45f0df04..7e75918f30 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_8017AE2C.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_8017AE2C.c @@ -3832,179 +3832,31 @@ void func_8017C8B8(void *a0) { -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - - extern s32 D_80126B58; - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - - -void func_8017C940(void *a0) { - - extern u16 D_801152BA; - extern s16 D_80115214; - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ -extern s32 func_80178B18(s32 param_1, s32 param_2); - -void func_8017CB68(s32 a0) { - s32 ptr1 = *(s32 *)(a0 + 0xD0); - s32 ptr2 = *(s32 *)(a0 + 0xDC); - s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; - - *(s16 *)(ptr1 + 0x1A) = val; - *(s16 *)(ptr1 + 0x18) = val; - - if (val < 0) { - *(s16 *)(ptr1 + 0x0) = 0; - func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); - *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; - } -} +DEFINE_func_8017CB68() /* dedup: shared engine-core @0x8017CB68 (src/shared) */ -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ @@ -4012,25 +3864,10 @@ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -4041,37 +3878,14 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -4083,26 +3897,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ @@ -4121,19 +3916,7 @@ void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) DEFINE_func_8017CE7C() /* dedup: shared engine-core @0x8017CE7C (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017CFE4(int param_1) -{ - unsigned short uVar1; - uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; - *(unsigned short *)(param_1 + 0x12) = uVar1; - if ((short)uVar1 > 0) { - func_8017D030(param_1); - } else { - ((void (*)(int))func_80146C3C)(param_1); - } -} +DEFINE_func_8017CFE4() /* dedup: shared engine-core @0x8017CFE4 (src/shared) */ @@ -4260,26 +4043,7 @@ DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ @@ -4292,57 +4056,10 @@ DEFINE_func_8017D428() /* dedup: shared engine-core @0x8017D428 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017D588(void *a0) -{ - void *obj; - s16 v; - v = *(u16 *)((s32)a0 + 0x12) - 0x100; - obj = *(void **)((s32)a0 + 0x34); - *(s16 *)((s32)a0 + 0x12) = v; - if (v > 0) { - ((void (*)(void *))func_8017D030)(a0); - } else { - *(s16 *)((s32)obj + 0x64) = 0x1000; - *(s16 *)((s32)obj + 0x62) = 0x1000; - *(s16 *)((s32)obj + 0x60) = 0x1000; - func_80146C3C(); - } -} +DEFINE_func_8017D588() /* dedup: shared engine-core @0x8017D588 (src/shared) */ @@ -4384,57 +4101,10 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ -extern void func_800D22E4(s32 a0); -extern void func_80146C3C(void); -extern void func_8017D728(void *a0); -void func_8017D6CC(void *a0) -{ - s32 t; - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0xA) { - ((void (*)(void))func_800D22E4)(); - func_8017D728(a0); - } else { - ((void (*)(void *))func_80146C3C)(a0); - } -} +DEFINE_func_8017D6CC() /* dedup: shared engine-core @0x8017D6CC (src/shared) */ diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8017AE2C.c b/src/ov_SC03_100/ov_SC03_100_jr_8017AE2C.c index cec884e98f..bc070e40b8 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_8017AE2C.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_8017AE2C.c @@ -3832,179 +3832,31 @@ void func_8017C8B8(void *a0) { -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - - extern s32 D_80126B58; - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - - -void func_8017C940(void *a0) { - - extern u16 D_801152BA; - extern s16 D_80115214; - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ -extern s32 func_80178B18(s32 param_1, s32 param_2); - -void func_8017CB68(s32 a0) { - s32 ptr1 = *(s32 *)(a0 + 0xD0); - s32 ptr2 = *(s32 *)(a0 + 0xDC); - s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; - - *(s16 *)(ptr1 + 0x1A) = val; - *(s16 *)(ptr1 + 0x18) = val; - - if (val < 0) { - *(s16 *)(ptr1 + 0x0) = 0; - func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); - *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; - } -} +DEFINE_func_8017CB68() /* dedup: shared engine-core @0x8017CB68 (src/shared) */ -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ @@ -4012,25 +3864,10 @@ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -4041,37 +3878,14 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -4083,26 +3897,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ @@ -4121,19 +3916,7 @@ void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) DEFINE_func_8017CE7C() /* dedup: shared engine-core @0x8017CE7C (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017CFE4(int param_1) -{ - unsigned short uVar1; - uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; - *(unsigned short *)(param_1 + 0x12) = uVar1; - if ((short)uVar1 > 0) { - func_8017D030(param_1); - } else { - ((void (*)(int))func_80146C3C)(param_1); - } -} +DEFINE_func_8017CFE4() /* dedup: shared engine-core @0x8017CFE4 (src/shared) */ @@ -4260,26 +4043,7 @@ DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ @@ -4292,57 +4056,10 @@ DEFINE_func_8017D428() /* dedup: shared engine-core @0x8017D428 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017D588(void *a0) -{ - void *obj; - s16 v; - v = *(u16 *)((s32)a0 + 0x12) - 0x100; - obj = *(void **)((s32)a0 + 0x34); - *(s16 *)((s32)a0 + 0x12) = v; - if (v > 0) { - ((void (*)(void *))func_8017D030)(a0); - } else { - *(s16 *)((s32)obj + 0x64) = 0x1000; - *(s16 *)((s32)obj + 0x62) = 0x1000; - *(s16 *)((s32)obj + 0x60) = 0x1000; - func_80146C3C(); - } -} +DEFINE_func_8017D588() /* dedup: shared engine-core @0x8017D588 (src/shared) */ @@ -4384,57 +4101,10 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ -extern void func_800D22E4(s32 a0); -extern void func_80146C3C(void); -extern void func_8017D728(void *a0); -void func_8017D6CC(void *a0) -{ - s32 t; - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0xA) { - ((void (*)(void))func_800D22E4)(); - func_8017D728(a0); - } else { - ((void (*)(void *))func_80146C3C)(a0); - } -} +DEFINE_func_8017D6CC() /* dedup: shared engine-core @0x8017D6CC (src/shared) */ diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8017AE2C.c b/src/ov_SC03_110/ov_SC03_110_jr_8017AE2C.c index a1b9499683..85f1185b4c 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8017AE2C.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8017AE2C.c @@ -3832,179 +3832,31 @@ void func_8017C8B8(void *a0) { -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017C8F4(void) { - - extern s32 D_80126B58; - func_8014BCEC((s32)&D_80126B58, 0x5); - func_8014BD24((s32)&D_80126B58, 0x270F); - func_8002D4C8(0xBFE, 0); -} +DEFINE_func_8017C8F4() /* dedup: shared engine-core @0x8017C8F4 (src/shared) */ -extern s16 func_80128CFC(u16 a0); -extern void func_8017BEBC(s32 a0, s32 a1); -extern s32 rand(void); -extern void func_8002D4C8(s32 a0, s32 a1); - - -void func_8017C940(void *a0) { - - extern u16 D_801152BA; - extern s16 D_80115214; - void *v1; - void *s2; - void *s1; - u16 arg; - s16 v0_s16; - u16 tmp; - s32 v0; - s32 rand_val; - s32 pads[4]; /* Force stack frame to 0x30 bytes */ - - v1 = *(void **)(a0 + 0xDC); - s2 = *(void **)(a0 + 0xCC); - s1 = *(void **)(a0 + 0xD0); - - if (*(u8 *)(v1 + 1) != 0) { - if (*(s16 *)(a0 + 0x108) == 0) { - arg = *(u16 *)(v1 + 2); - v0_s16 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0_s16; - } - } - - tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; - *(u16 *)((s32)s1 + 0x1A) = tmp; - *(u16 *)((s32)s1 + 0x18) = tmp; - - v0 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v0; - - if (v0 != -1) { - rand_val = rand(); - func_8017BEBC((s32)a0, rand_val & 1); - } else { - D_80115214 = 4; - D_801152BA -= 1; - func_8002D4C8(0x62E, 0); - *(u16 *)s2 = 0; - *(u16 *)(a0 + 2) += 1; - *(s32 *)(a0 + 0x1C) = 0x28; - } -} +DEFINE_func_8017C940() /* dedup: shared engine-core @0x8017C940 (src/shared) */ -extern s16 func_80128CFC(u16 a0); - -void func_8017CA34(void *a0) { - void *v1 = *(void **)(a0 + 0xDC); - s16 v0; - - if (*(u8 *)(v1 + 1) == 0) { - v0 = 1; - } else { - v0 = *(s16 *)(a0 + 0x108); - if (v0 == 0) { - u16 arg = *(u16 *)(v1 + 2); - v0 = func_80128CFC(arg); - *(s16 *)(a0 + 0x108) = v0; - } - v0 = *(s16 *)(a0 + 0x108); - } - - if (v0 != 0) { - *(u16 *)(a0 + 0x2) += 1; - } -} +DEFINE_func_8017CA34() /* dedup: shared engine-core @0x8017CA34 (src/shared) */ -extern void func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); - -void func_8017CAB4(s32 a0) { - s32 v0; - s32 *s0_ptr; - u16 sp[8]; - - s0_ptr = *(s32 **)(a0 + 0xDC); - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - return; - } - - func_8001C214(v0, s0_ptr[1]); - func_8012A828(a0, (void *)s0_ptr[2]); - - *(s16 *)(a0 + 0x5C) = 0; - *(s32 *)(a0 + 0x58) = 0; - - sp[0] = *(u16 *)(a0 + 0x6); - sp[1] = *(u16 *)(a0 + 0xA); - sp[2] = *(u16 *)(a0 + 0xE); - - func_800D20C0(&sp[0], &sp[4], 0); - func_800D23D0(&sp[4]); - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; - *(u16 *)(a0 + 0x2) += 1; -} +DEFINE_func_8017CAB4() /* dedup: shared engine-core @0x8017CAB4 (src/shared) */ -extern s32 func_80178B18(s32 param_1, s32 param_2); - -void func_8017CB68(s32 a0) { - s32 ptr1 = *(s32 *)(a0 + 0xD0); - s32 ptr2 = *(s32 *)(a0 + 0xDC); - s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; - - *(s16 *)(ptr1 + 0x1A) = val; - *(s16 *)(ptr1 + 0x18) = val; - - if (val < 0) { - *(s16 *)(ptr1 + 0x0) = 0; - func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); - *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; - } -} +DEFINE_func_8017CB68() /* dedup: shared engine-core @0x8017CB68 (src/shared) */ -extern void func_800291A0(s32, s32); -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8017CBD4(s32 a0) { - extern void func_8002955C(void); - extern s32 func_8002953C(void); - extern void func_8002AC00(s32 arg0); - u8 *p = *(u8 **)(a0 + 0xDC); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - func_800291A0(*p + 0x3A, 1); - func_8002955C(); - if ((u32)func_8002953C() >= 0x23U) { - func_8002AC00(0x25); - } - *(u16 *)(a0 + 2) += 1; - } -} +DEFINE_func_8017CBD4() /* dedup: shared engine-core @0x8017CBD4 (src/shared) */ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ @@ -4012,25 +3864,10 @@ DEFINE_func_8017CC60() /* dedup: shared engine-core @0x8017CC60 (src/shared) */ -void func_8017CC80(s32 a0) { - extern int func_80178970(void); - extern void func_80178D18(void); - s32 rand_val = rand(); - - func_8017BEBC(a0, rand_val & 0xF); - if (((s32 (*)(s32))func_80178970)(a0) == 0) { - return; - } - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 0x2) = 1; -} +DEFINE_func_8017CC80() /* dedup: shared engine-core @0x8017CC80 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - -void func_8017CCD4(void *a0) { - func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); -} +DEFINE_func_8017CCD4() /* dedup: shared engine-core @0x8017CCD4 (src/shared) */ @@ -4041,37 +3878,14 @@ void func_8017CD10(void *a0) { } -extern void func_80147324(s32 arg0); -void func_8017CD4C(void *a0) -{ - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_80147324(*(u16 *)((s32)a0 + 0x2E)); - } - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; -} +DEFINE_func_8017CD4C() /* dedup: shared engine-core @0x8017CD4C (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017D030(int); - -void func_8017CD9C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c); - *(int *)(param_1 + 0x1c) = iVar1 + 1; - if (iVar1 < 0xc) { - *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; - } else { - *(int *)(param_1 + 0x1c) = 0; - *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; - } - func_8017D030(param_1); - return; -} +DEFINE_func_8017CD9C() /* dedup: shared engine-core @0x8017CD9C (src/shared) */ @@ -4083,26 +3897,7 @@ void func_8017CD9C(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017D030(int); - -void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) -{ - s32 t; - - t = param_1->f1c; - param_1->f1c = t + 1; - if (t < 0x20) { - param_1->f2a = param_1->f2a - 0x10; - } else { - if (param_1->f30 == 0) { - func_80147324(param_1->f2c); - } - param_1->f1c = 0; - param_1->f02 = param_1->f02 + 1; - } - ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); -} +DEFINE_func_8017CDF8() /* dedup: shared engine-core @0x8017CDF8 (src/shared) */ @@ -4121,19 +3916,7 @@ void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) DEFINE_func_8017CE7C() /* dedup: shared engine-core @0x8017CE7C (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017CFE4(int param_1) -{ - unsigned short uVar1; - uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; - *(unsigned short *)(param_1 + 0x12) = uVar1; - if ((short)uVar1 > 0) { - func_8017D030(param_1); - } else { - ((void (*)(int))func_80146C3C)(param_1); - } -} +DEFINE_func_8017CFE4() /* dedup: shared engine-core @0x8017CFE4 (src/shared) */ @@ -4260,26 +4043,7 @@ DEFINE_func_8017D378() /* dedup: shared engine-core @0x8017D378 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017D030(int); - -void func_8017D3B8(void *a0) { - s32 t; - s32 p; - - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - p = *(s32 *)((s32)a0 + 0x34); - if (t < 0xC) { - *(u16 *)((s32)a0 + 0x12) += 0xE0; - } else { - *(s16 *)(p + 0x64) = 0; - *(s16 *)(p + 0x60) = 0; - *(s16 *)(p + 0x62) = 0x3000; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) += 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D3B8() /* dedup: shared engine-core @0x8017D3B8 (src/shared) */ @@ -4292,57 +4056,10 @@ DEFINE_func_8017D428() /* dedup: shared engine-core @0x8017D428 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017D030(int); - -void func_8017D4B4(void *a0) -{ - void *obj; - s32 t; - s16 i; - u16 v; - u16 w; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - v = *(u16 *)((s32)obj + 0x64) + 0x80; - w = *(u16 *)((s32)obj + 0x62) - 0x100; - *(s16 *)((s32)obj + 0x64) = v; - *(s16 *)((s32)obj + 0x60) = v; - *(s16 *)((s32)obj + 0x62) = w; - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); - i++; - } while (i < 3); - } else { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017D030)(a0); -} +DEFINE_func_8017D4B4() /* dedup: shared engine-core @0x8017D4B4 (src/shared) */ -extern void func_8017D030(int); -extern void func_80146C3C(void); -void func_8017D588(void *a0) -{ - void *obj; - s16 v; - v = *(u16 *)((s32)a0 + 0x12) - 0x100; - obj = *(void **)((s32)a0 + 0x34); - *(s16 *)((s32)a0 + 0x12) = v; - if (v > 0) { - ((void (*)(void *))func_8017D030)(a0); - } else { - *(s16 *)((s32)obj + 0x64) = 0x1000; - *(s16 *)((s32)obj + 0x62) = 0x1000; - *(s16 *)((s32)obj + 0x60) = 0x1000; - func_80146C3C(); - } -} +DEFINE_func_8017D588() /* dedup: shared engine-core @0x8017D588 (src/shared) */ @@ -4384,57 +4101,10 @@ void func_8017D5DC(void *a0) { * the front of the block and swaps the two `lhu`s instead. Boost the loads, starve * the arithmetic. */ -extern int rand(void); - -void func_8017D618(void *a0) -{ - s32 p; - s32 obj; - short r; - u16 t; - u16 t2; - u16 e; - u16 c; - u16 d; - - p = (s32)a0; - obj = *(s32 *)(p + 0x34); - r = rand(); - *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); - if (*(s32 *)(p + 0x2C) != 0) { - t = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = 0x20; - *(u16 *)(p + 0x0A) = t - 0x140; - } else { - t2 = *(u16 *)(obj + 0x0A); - *(s16 *)(p + 0x16) = -0x20; - *(u16 *)(p + 0x0A) = t2; - } - e = *(u16 *)(obj + 0x0E); - c = *(u16 *)(p + 0x02); - *(s32 *)(p + 0x30) = (r >> 12) & 3; - d = ((r >> 6) & 0x3F) - 0x20; - *(u16 *)(p + 0x0E) = e + d; - d = c + 1; - *(u16 *)(p + 0x02) = d; -} +DEFINE_func_8017D618() /* dedup: shared engine-core @0x8017D618 (src/shared) */ -extern void func_800D22E4(s32 a0); -extern void func_80146C3C(void); -extern void func_8017D728(void *a0); -void func_8017D6CC(void *a0) -{ - s32 t; - t = *(s32 *)((s32)a0 + 0x1C); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0xA) { - ((void (*)(void))func_800D22E4)(); - func_8017D728(a0); - } else { - ((void (*)(void *))func_80146C3C)(a0); - } -} +DEFINE_func_8017D6CC() /* dedup: shared engine-core @0x8017D6CC (src/shared) */ diff --git a/src/shared/engine_core.h b/src/shared/engine_core.h index b166645636..9e20cdfb7e 100644 --- a/src/shared/engine_core.h +++ b/src/shared/engine_core.h @@ -2713,6 +2713,350 @@ } while (i < 2); \ } +#define DEFINE_func_8017CCD4() \ + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \ + void func_8017CCD4(void *a0) { \ + func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); \ + } + +#define DEFINE_func_8017C8F4() \ + extern s32 D_80126B58; \ + extern s32 func_8014BCEC(s32 a0, s32 a1); \ + extern void func_8014BD24(s32 a0, s32 a1); \ + extern void func_8002D4C8(s32 a0, s32 a1); \ + void func_8017C8F4(void) { \ + func_8014BCEC((s32)&D_80126B58, 0x5); \ + func_8014BD24((s32)&D_80126B58, 0x270F); \ + func_8002D4C8(0xBFE, 0); \ + } + +#define DEFINE_func_8017CFE4() \ + extern void func_8017D030(int); \ + extern void func_80146C3C(void); \ + void func_8017CFE4(int param_1) \ + { \ + unsigned short uVar1; \ + uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; \ + *(unsigned short *)(param_1 + 0x12) = uVar1; \ + if ((short)uVar1 > 0) { \ + func_8017D030(param_1); \ + } else { \ + ((void (*)(int))func_80146C3C)(param_1); \ + } \ + } + +#define DEFINE_func_8017CD4C() \ + extern void func_80147324(s32 arg0); \ + void func_8017CD4C(void *a0) \ + { \ + if (*(s32 *)((s32)a0 + 0x30) == 0) { \ + func_80147324(*(u16 *)((s32)a0 + 0x2E)); \ + } \ + *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; \ + } + +#define DEFINE_func_8017CC80() \ + void func_8017CC80(s32 a0) { \ + extern int func_80178970(void); \ + extern void func_80178D18(void); \ + s32 rand_val = rand(); \ + func_8017BEBC(a0, rand_val & 0xF); \ + if (((s32 (*)(s32))func_80178970)(a0) == 0) { \ + return; \ + } \ + ((void (*)(s32))func_80178D18)(a0); \ + *(s16 *)(a0 + 0x2) = 1; \ + } + +#define DEFINE_func_8017D588() \ + extern void func_8017D030(int); \ + extern void func_80146C3C(void); \ + void func_8017D588(void *a0) \ + { \ + void *obj; \ + s16 v; \ + v = *(u16 *)((s32)a0 + 0x12) - 0x100; \ + obj = *(void **)((s32)a0 + 0x34); \ + *(s16 *)((s32)a0 + 0x12) = v; \ + if (v > 0) { \ + ((void (*)(void *))func_8017D030)(a0); \ + } else { \ + *(s16 *)((s32)obj + 0x64) = 0x1000; \ + *(s16 *)((s32)obj + 0x62) = 0x1000; \ + *(s16 *)((s32)obj + 0x60) = 0x1000; \ + func_80146C3C(); \ + } \ + } + +#define DEFINE_func_8017CD9C() \ + extern void func_8017D030(int); \ + void func_8017CD9C(int param_1) \ + { \ + int iVar1; \ + iVar1 = *(int *)(param_1 + 0x1c); \ + *(int *)(param_1 + 0x1c) = iVar1 + 1; \ + if (iVar1 < 0xc) { \ + *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; \ + } else { \ + *(int *)(param_1 + 0x1c) = 0; \ + *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; \ + } \ + func_8017D030(param_1); \ + return; \ + } + +#define DEFINE_func_8017D6CC() \ + extern void func_800D22E4(s32 a0); \ + extern void func_80146C3C(void); \ + extern void func_8017D728(void *a0); \ + void func_8017D6CC(void *a0) \ + { \ + s32 t; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + if (t < 0xA) { \ + ((void (*)(void))func_800D22E4)(); \ + func_8017D728(a0); \ + } else { \ + ((void (*)(void *))func_80146C3C)(a0); \ + } \ + } + +#define DEFINE_func_8017CB68() \ + extern s32 func_80178B18(s32 param_1, s32 param_2); \ + void func_8017CB68(s32 a0) { \ + s32 ptr1 = *(s32 *)(a0 + 0xD0); \ + s32 ptr2 = *(s32 *)(a0 + 0xDC); \ + s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; \ + *(s16 *)(ptr1 + 0x1A) = val; \ + *(s16 *)(ptr1 + 0x18) = val; \ + if (val < 0) { \ + *(s16 *)(ptr1 + 0x0) = 0; \ + func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); \ + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; \ + } \ + } + +#define DEFINE_func_8017D3B8() \ + extern void func_8017D030(int); \ + void func_8017D3B8(void *a0) { \ + s32 t; \ + s32 p; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + p = *(s32 *)((s32)a0 + 0x34); \ + if (t < 0xC) { \ + *(u16 *)((s32)a0 + 0x12) += 0xE0; \ + } else { \ + *(s16 *)(p + 0x64) = 0; \ + *(s16 *)(p + 0x60) = 0; \ + *(s16 *)(p + 0x62) = 0x3000; \ + *(s32 *)((s32)a0 + 0x1C) = 0; \ + *(u16 *)((s32)a0 + 0x2) += 1; \ + } \ + ((void (*)(void *))func_8017D030)(a0); \ + } + +#define DEFINE_func_8017CA34() \ + extern s16 func_80128CFC(u16 a0); \ + void func_8017CA34(void *a0) { \ + void *v1 = *(void **)(a0 + 0xDC); \ + s16 v0; \ + if (*(u8 *)(v1 + 1) == 0) { \ + v0 = 1; \ + } else { \ + v0 = *(s16 *)(a0 + 0x108); \ + if (v0 == 0) { \ + u16 arg = *(u16 *)(v1 + 2); \ + v0 = func_80128CFC(arg); \ + *(s16 *)(a0 + 0x108) = v0; \ + } \ + v0 = *(s16 *)(a0 + 0x108); \ + } \ + if (v0 != 0) { \ + *(u16 *)(a0 + 0x2) += 1; \ + } \ + } + +#define DEFINE_func_8017CDF8() \ + extern void func_80147324(s32 arg0); \ + extern void func_8017D030(int); \ + void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) \ + { \ + s32 t; \ + t = param_1->f1c; \ + param_1->f1c = t + 1; \ + if (t < 0x20) { \ + param_1->f2a = param_1->f2a - 0x10; \ + } else { \ + if (param_1->f30 == 0) { \ + func_80147324(param_1->f2c); \ + } \ + param_1->f1c = 0; \ + param_1->f02 = param_1->f02 + 1; \ + } \ + ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); \ + } + +#define DEFINE_func_8017CBD4() \ + extern void func_800291A0(s32, s32); \ + extern int func_80178970(void); \ + extern void func_80178D18(void); \ + void func_8017CBD4(s32 a0) { \ + extern void func_8002955C(void); \ + extern s32 func_8002953C(void); \ + extern void func_8002AC00(s32 arg0); \ + u8 *p = *(u8 **)(a0 + 0xDC); \ + if (func_80178970() != 0) { \ + ((void (*)(s32))func_80178D18)(a0); \ + func_800291A0(*p + 0x3A, 1); \ + func_8002955C(); \ + if ((u32)func_8002953C() >= 0x23U) { \ + func_8002AC00(0x25); \ + } \ + *(u16 *)(a0 + 2) += 1; \ + } \ + } + +#define DEFINE_func_8017CAB4() \ + extern void func_8012C1B8(void); \ + extern void func_8001C214(s32 a0, s32 a1); \ + extern void func_8012A828(s32 a0, void *a1); \ + extern void func_800D20C0(void *a0, void *a1, s32 a2); \ + extern void func_800D23D0(void *a0); \ + void func_8017CAB4(s32 a0) { \ + s32 v0; \ + s32 *s0_ptr; \ + u16 sp[8]; \ + s0_ptr = *(s32 **)(a0 + 0xDC); \ + v0 = ((s32 (*)(void))func_8012C1B8)(); \ + *(s32 *)(a0 + 0x20) = v0; \ + if (v0 == 0) { \ + return; \ + } \ + func_8001C214(v0, s0_ptr[1]); \ + func_8012A828(a0, (void *)s0_ptr[2]); \ + *(s16 *)(a0 + 0x5C) = 0; \ + *(s32 *)(a0 + 0x58) = 0; \ + sp[0] = *(u16 *)(a0 + 0x6); \ + sp[1] = *(u16 *)(a0 + 0xA); \ + sp[2] = *(u16 *)(a0 + 0xE); \ + func_800D20C0(&sp[0], &sp[4], 0); \ + func_800D23D0(&sp[4]); \ + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; \ + *(u16 *)(a0 + 0x2) += 1; \ + } + +#define DEFINE_func_8017D618() \ + extern int rand(void); \ + void func_8017D618(void *a0) \ + { \ + s32 p; \ + s32 obj; \ + short r; \ + u16 t; \ + u16 t2; \ + u16 e; \ + u16 c; \ + u16 d; \ + p = (s32)a0; \ + obj = *(s32 *)(p + 0x34); \ + r = rand(); \ + *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); \ + if (*(s32 *)(p + 0x2C) != 0) { \ + t = *(u16 *)(obj + 0x0A); \ + *(s16 *)(p + 0x16) = 0x20; \ + *(u16 *)(p + 0x0A) = t - 0x140; \ + } else { \ + t2 = *(u16 *)(obj + 0x0A); \ + *(s16 *)(p + 0x16) = -0x20; \ + *(u16 *)(p + 0x0A) = t2; \ + } \ + e = *(u16 *)(obj + 0x0E); \ + c = *(u16 *)(p + 0x02); \ + *(s32 *)(p + 0x30) = (r >> 12) & 3; \ + d = ((r >> 6) & 0x3F) - 0x20; \ + *(u16 *)(p + 0x0E) = e + d; \ + d = c + 1; \ + *(u16 *)(p + 0x02) = d; \ + } + +#define DEFINE_func_8017D4B4() \ + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \ + extern void func_8017D030(int); \ + void func_8017D4B4(void *a0) \ + { \ + void *obj; \ + s32 t; \ + s16 i; \ + u16 v; \ + u16 w; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + obj = *(void **)((s32)a0 + 0x34); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + if (t < 0x20) { \ + v = *(u16 *)((s32)obj + 0x64) + 0x80; \ + w = *(u16 *)((s32)obj + 0x62) - 0x100; \ + *(s16 *)((s32)obj + 0x64) = v; \ + *(s16 *)((s32)obj + 0x60) = v; \ + *(s16 *)((s32)obj + 0x62) = w; \ + i = 0; \ + do { \ + func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); \ + i++; \ + } while (i < 3); \ + } else { \ + *(s32 *)((s32)a0 + 0x1C) = 0; \ + *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; \ + } \ + ((void (*)(void *))func_8017D030)(a0); \ + } + +#define DEFINE_func_8017C940() \ + extern s16 func_80128CFC(u16 a0); \ + extern void func_8017BEBC(s32 a0, s32 a1); \ + extern s32 rand(void); \ + extern void func_8002D4C8(s32 a0, s32 a1); \ + extern u16 D_801152BA; \ + extern s16 D_80115214; \ + void func_8017C940(void *a0) { \ + void *v1; \ + void *s2; \ + void *s1; \ + u16 arg; \ + s16 v0_s16; \ + u16 tmp; \ + s32 v0; \ + s32 rand_val; \ + s32 pads[4]; /* Force stack frame to 0x30 bytes */ \ + v1 = *(void **)(a0 + 0xDC); \ + s2 = *(void **)(a0 + 0xCC); \ + s1 = *(void **)(a0 + 0xD0); \ + if (*(u8 *)(v1 + 1) != 0) { \ + if (*(s16 *)(a0 + 0x108) == 0) { \ + arg = *(u16 *)(v1 + 2); \ + v0_s16 = func_80128CFC(arg); \ + *(s16 *)(a0 + 0x108) = v0_s16; \ + } \ + } \ + tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; \ + *(u16 *)((s32)s1 + 0x1A) = tmp; \ + *(u16 *)((s32)s1 + 0x18) = tmp; \ + v0 = *(s32 *)(a0 + 0x1C) - 1; \ + *(s32 *)(a0 + 0x1C) = v0; \ + if (v0 != -1) { \ + rand_val = rand(); \ + func_8017BEBC((s32)a0, rand_val & 1); \ + } else { \ + D_80115214 = 4; \ + D_801152BA -= 1; \ + func_8002D4C8(0x62E, 0); \ + *(u16 *)s2 = 0; \ + *(u16 *)(a0 + 2) += 1; \ + *(s32 *)(a0 + 0x1C) = 0x28; \ + } \ + } + #endif #define DEFINE_func_80128EA8() \ @@ -34831,4 +35175,348 @@ } while (i < 2); \ } +#define DEFINE_func_8017CCD4() \ + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \ + void func_8017CCD4(void *a0) { \ + func_80146A6C(0x19, a0, 0, 0, 0, 0, 1); \ + } + +#define DEFINE_func_8017C8F4() \ + extern s32 D_80126B58; \ + extern s32 func_8014BCEC(s32 a0, s32 a1); \ + extern void func_8014BD24(s32 a0, s32 a1); \ + extern void func_8002D4C8(s32 a0, s32 a1); \ + void func_8017C8F4(void) { \ + func_8014BCEC((s32)&D_80126B58, 0x5); \ + func_8014BD24((s32)&D_80126B58, 0x270F); \ + func_8002D4C8(0xBFE, 0); \ + } + +#define DEFINE_func_8017CFE4() \ + extern void func_8017D030(int); \ + extern void func_80146C3C(void); \ + void func_8017CFE4(int param_1) \ + { \ + unsigned short uVar1; \ + uVar1 = *(unsigned short *)(param_1 + 0x12) - 0x100; \ + *(unsigned short *)(param_1 + 0x12) = uVar1; \ + if ((short)uVar1 > 0) { \ + func_8017D030(param_1); \ + } else { \ + ((void (*)(int))func_80146C3C)(param_1); \ + } \ + } + +#define DEFINE_func_8017CD4C() \ + extern void func_80147324(s32 arg0); \ + void func_8017CD4C(void *a0) \ + { \ + if (*(s32 *)((s32)a0 + 0x30) == 0) { \ + func_80147324(*(u16 *)((s32)a0 + 0x2E)); \ + } \ + *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; \ + } + +#define DEFINE_func_8017CC80() \ + void func_8017CC80(s32 a0) { \ + extern int func_80178970(void); \ + extern void func_80178D18(void); \ + s32 rand_val = rand(); \ + func_8017BEBC(a0, rand_val & 0xF); \ + if (((s32 (*)(s32))func_80178970)(a0) == 0) { \ + return; \ + } \ + ((void (*)(s32))func_80178D18)(a0); \ + *(s16 *)(a0 + 0x2) = 1; \ + } + +#define DEFINE_func_8017D588() \ + extern void func_8017D030(int); \ + extern void func_80146C3C(void); \ + void func_8017D588(void *a0) \ + { \ + void *obj; \ + s16 v; \ + v = *(u16 *)((s32)a0 + 0x12) - 0x100; \ + obj = *(void **)((s32)a0 + 0x34); \ + *(s16 *)((s32)a0 + 0x12) = v; \ + if (v > 0) { \ + ((void (*)(void *))func_8017D030)(a0); \ + } else { \ + *(s16 *)((s32)obj + 0x64) = 0x1000; \ + *(s16 *)((s32)obj + 0x62) = 0x1000; \ + *(s16 *)((s32)obj + 0x60) = 0x1000; \ + func_80146C3C(); \ + } \ + } + +#define DEFINE_func_8017CD9C() \ + extern void func_8017D030(int); \ + void func_8017CD9C(int param_1) \ + { \ + int iVar1; \ + iVar1 = *(int *)(param_1 + 0x1c); \ + *(int *)(param_1 + 0x1c) = iVar1 + 1; \ + if (iVar1 < 0xc) { \ + *(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; \ + } else { \ + *(int *)(param_1 + 0x1c) = 0; \ + *(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; \ + } \ + func_8017D030(param_1); \ + return; \ + } + +#define DEFINE_func_8017D6CC() \ + extern void func_800D22E4(s32 a0); \ + extern void func_80146C3C(void); \ + extern void func_8017D728(void *a0); \ + void func_8017D6CC(void *a0) \ + { \ + s32 t; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + if (t < 0xA) { \ + ((void (*)(void))func_800D22E4)(); \ + func_8017D728(a0); \ + } else { \ + ((void (*)(void *))func_80146C3C)(a0); \ + } \ + } + +#define DEFINE_func_8017CB68() \ + extern s32 func_80178B18(s32 param_1, s32 param_2); \ + void func_8017CB68(s32 a0) { \ + s32 ptr1 = *(s32 *)(a0 + 0xD0); \ + s32 ptr2 = *(s32 *)(a0 + 0xDC); \ + s16 val = *(u16 *)(ptr1 + 0x1A) - 0xC0; \ + *(s16 *)(ptr1 + 0x1A) = val; \ + *(s16 *)(ptr1 + 0x18) = val; \ + if (val < 0) { \ + *(s16 *)(ptr1 + 0x0) = 0; \ + func_80178B18(a0, *(s32 *)(ptr2 + 0xC)); \ + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1; \ + } \ + } + +#define DEFINE_func_8017D3B8() \ + extern void func_8017D030(int); \ + void func_8017D3B8(void *a0) { \ + s32 t; \ + s32 p; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + p = *(s32 *)((s32)a0 + 0x34); \ + if (t < 0xC) { \ + *(u16 *)((s32)a0 + 0x12) += 0xE0; \ + } else { \ + *(s16 *)(p + 0x64) = 0; \ + *(s16 *)(p + 0x60) = 0; \ + *(s16 *)(p + 0x62) = 0x3000; \ + *(s32 *)((s32)a0 + 0x1C) = 0; \ + *(u16 *)((s32)a0 + 0x2) += 1; \ + } \ + ((void (*)(void *))func_8017D030)(a0); \ + } + +#define DEFINE_func_8017CA34() \ + extern s16 func_80128CFC(u16 a0); \ + void func_8017CA34(void *a0) { \ + void *v1 = *(void **)(a0 + 0xDC); \ + s16 v0; \ + if (*(u8 *)(v1 + 1) == 0) { \ + v0 = 1; \ + } else { \ + v0 = *(s16 *)(a0 + 0x108); \ + if (v0 == 0) { \ + u16 arg = *(u16 *)(v1 + 2); \ + v0 = func_80128CFC(arg); \ + *(s16 *)(a0 + 0x108) = v0; \ + } \ + v0 = *(s16 *)(a0 + 0x108); \ + } \ + if (v0 != 0) { \ + *(u16 *)(a0 + 0x2) += 1; \ + } \ + } + +#define DEFINE_func_8017CDF8() \ + extern void func_80147324(s32 arg0); \ + extern void func_8017D030(int); \ + void func_8017CDF8(Ent_8017BFE0_8017CDF8 *param_1) \ + { \ + s32 t; \ + t = param_1->f1c; \ + param_1->f1c = t + 1; \ + if (t < 0x20) { \ + param_1->f2a = param_1->f2a - 0x10; \ + } else { \ + if (param_1->f30 == 0) { \ + func_80147324(param_1->f2c); \ + } \ + param_1->f1c = 0; \ + param_1->f02 = param_1->f02 + 1; \ + } \ + ((void (*)(Ent_8017BFE0_8017CDF8 *))func_8017D030)(param_1); \ + } + +#define DEFINE_func_8017CBD4() \ + extern void func_800291A0(s32, s32); \ + extern int func_80178970(void); \ + extern void func_80178D18(void); \ + void func_8017CBD4(s32 a0) { \ + extern void func_8002955C(void); \ + extern s32 func_8002953C(void); \ + extern void func_8002AC00(s32 arg0); \ + u8 *p = *(u8 **)(a0 + 0xDC); \ + if (func_80178970() != 0) { \ + ((void (*)(s32))func_80178D18)(a0); \ + func_800291A0(*p + 0x3A, 1); \ + func_8002955C(); \ + if ((u32)func_8002953C() >= 0x23U) { \ + func_8002AC00(0x25); \ + } \ + *(u16 *)(a0 + 2) += 1; \ + } \ + } + +#define DEFINE_func_8017CAB4() \ + extern void func_8012C1B8(void); \ + extern void func_8001C214(s32 a0, s32 a1); \ + extern void func_8012A828(s32 a0, void *a1); \ + extern void func_800D20C0(void *a0, void *a1, s32 a2); \ + extern void func_800D23D0(void *a0); \ + void func_8017CAB4(s32 a0) { \ + s32 v0; \ + s32 *s0_ptr; \ + u16 sp[8]; \ + s0_ptr = *(s32 **)(a0 + 0xDC); \ + v0 = ((s32 (*)(void))func_8012C1B8)(); \ + *(s32 *)(a0 + 0x20) = v0; \ + if (v0 == 0) { \ + return; \ + } \ + func_8001C214(v0, s0_ptr[1]); \ + func_8012A828(a0, (void *)s0_ptr[2]); \ + *(s16 *)(a0 + 0x5C) = 0; \ + *(s32 *)(a0 + 0x58) = 0; \ + sp[0] = *(u16 *)(a0 + 0x6); \ + sp[1] = *(u16 *)(a0 + 0xA); \ + sp[2] = *(u16 *)(a0 + 0xE); \ + func_800D20C0(&sp[0], &sp[4], 0); \ + func_800D23D0(&sp[4]); \ + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = sp[5] + 0x800; \ + *(u16 *)(a0 + 0x2) += 1; \ + } + +#define DEFINE_func_8017D618() \ + extern int rand(void); \ + void func_8017D618(void *a0) \ + { \ + s32 p; \ + s32 obj; \ + short r; \ + u16 t; \ + u16 t2; \ + u16 e; \ + u16 c; \ + u16 d; \ + p = (s32)a0; \ + obj = *(s32 *)(p + 0x34); \ + r = rand(); \ + *(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); \ + if (*(s32 *)(p + 0x2C) != 0) { \ + t = *(u16 *)(obj + 0x0A); \ + *(s16 *)(p + 0x16) = 0x20; \ + *(u16 *)(p + 0x0A) = t - 0x140; \ + } else { \ + t2 = *(u16 *)(obj + 0x0A); \ + *(s16 *)(p + 0x16) = -0x20; \ + *(u16 *)(p + 0x0A) = t2; \ + } \ + e = *(u16 *)(obj + 0x0E); \ + c = *(u16 *)(p + 0x02); \ + *(s32 *)(p + 0x30) = (r >> 12) & 3; \ + d = ((r >> 6) & 0x3F) - 0x20; \ + *(u16 *)(p + 0x0E) = e + d; \ + d = c + 1; \ + *(u16 *)(p + 0x02) = d; \ + } + +#define DEFINE_func_8017D4B4() \ + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \ + extern void func_8017D030(int); \ + void func_8017D4B4(void *a0) \ + { \ + void *obj; \ + s32 t; \ + s16 i; \ + u16 v; \ + u16 w; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + obj = *(void **)((s32)a0 + 0x34); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + if (t < 0x20) { \ + v = *(u16 *)((s32)obj + 0x64) + 0x80; \ + w = *(u16 *)((s32)obj + 0x62) - 0x100; \ + *(s16 *)((s32)obj + 0x64) = v; \ + *(s16 *)((s32)obj + 0x60) = v; \ + *(s16 *)((s32)obj + 0x62) = w; \ + i = 0; \ + do { \ + func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); \ + i++; \ + } while (i < 3); \ + } else { \ + *(s32 *)((s32)a0 + 0x1C) = 0; \ + *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; \ + } \ + ((void (*)(void *))func_8017D030)(a0); \ + } + +#define DEFINE_func_8017C940() \ + extern s16 func_80128CFC(u16 a0); \ + extern void func_8017BEBC(s32 a0, s32 a1); \ + extern s32 rand(void); \ + extern void func_8002D4C8(s32 a0, s32 a1); \ + extern u16 D_801152BA; \ + extern s16 D_80115214; \ + void func_8017C940(void *a0) { \ + void *v1; \ + void *s2; \ + void *s1; \ + u16 arg; \ + s16 v0_s16; \ + u16 tmp; \ + s32 v0; \ + s32 rand_val; \ + s32 pads[4]; /* Force stack frame to 0x30 bytes */ \ + v1 = *(void **)(a0 + 0xDC); \ + s2 = *(void **)(a0 + 0xCC); \ + s1 = *(void **)(a0 + 0xD0); \ + if (*(u8 *)(v1 + 1) != 0) { \ + if (*(s16 *)(a0 + 0x108) == 0) { \ + arg = *(u16 *)(v1 + 2); \ + v0_s16 = func_80128CFC(arg); \ + *(s16 *)(a0 + 0x108) = v0_s16; \ + } \ + } \ + tmp = *(u16 *)((s32)s1 + 0x1A) + 0x20; \ + *(u16 *)((s32)s1 + 0x1A) = tmp; \ + *(u16 *)((s32)s1 + 0x18) = tmp; \ + v0 = *(s32 *)(a0 + 0x1C) - 1; \ + *(s32 *)(a0 + 0x1C) = v0; \ + if (v0 != -1) { \ + rand_val = rand(); \ + func_8017BEBC((s32)a0, rand_val & 1); \ + } else { \ + D_80115214 = 4; \ + D_801152BA -= 1; \ + func_8002D4C8(0x62E, 0); \ + *(u16 *)s2 = 0; \ + *(u16 *)(a0 + 2) += 1; \ + *(s32 *)(a0 + 0x1C) = 0x28; \ + } \ + } + #endif