diff --git a/config/dedup.us.yaml b/config/dedup.us.yaml index defc326dc0..3dc603ad85 100644 --- a/config/dedup.us.yaml +++ b/config/dedup.us.yaml @@ -15489,3 +15489,59 @@ groups: func: DEFINE_func_80132F40 vram: 0x80132F40 binaries: [ov_SC01_077, ov_SC01_005, ov_SC01_006, ov_SC03_001, ov_SC01_000, ov_SC01_001, ov_SC02_000, ov_SC02_003, ov_SC03_002, ov_SC03_006, ov_SC04_000, ov_SC04_018, ov_SC04_019, ov_SC05_000, ov_SC06_000, ov_SC07_000, ov_SC01_004, ov_SC01_008, ov_SC01_009, ov_SC01_074, ov_SC01_080, ov_SC01_084, ov_SC02_004, ov_SC02_005, ov_SC02_011, ov_SC02_015, ov_SC02_016, ov_SC02_017, ov_SC02_021, ov_SC02_026, ov_SC02_027, ov_SC02_028, ov_SC02_031, ov_SC02_035, ov_SC02_039, ov_SC02_041, ov_SC03_003, ov_SC03_007, ov_SC03_010, ov_SC03_011, ov_SC03_012, ov_SC03_013, ov_SC03_014, ov_SC03_015, ov_SC03_023, ov_SC03_024, ov_SC03_028, ov_SC03_029, ov_SC03_030, ov_SC03_031, ov_SC03_089, ov_SC03_090, ov_SC03_091, ov_SC03_092, ov_SC03_093, ov_SC03_094, ov_SC03_095, ov_SC03_096, ov_SC03_097, ov_SC03_098, ov_SC03_099, ov_SC03_100, ov_SC03_101, ov_SC03_102, ov_SC03_103, ov_SC03_104, ov_SC03_105, ov_SC03_108, ov_SC03_109, ov_SC03_110, ov_SC03_111, ov_SC03_112, ov_SC03_113, ov_SC03_114, ov_SC03_115, ov_SC03_116, ov_SC03_117, ov_SC03_118, ov_SC03_119, ov_SC03_121, ov_SC03_124, ov_SC03_125, ov_SC03_126, ov_SC04_002, ov_SC04_003, ov_SC04_004, ov_SC04_005, ov_SC04_006, ov_SC04_007, ov_SC04_008, ov_SC04_009, ov_SC04_010, ov_SC04_011, ov_SC04_012, ov_SC04_015, ov_SC04_016, ov_SC04_020, ov_SC04_021, ov_SC05_001, ov_SC05_002, ov_SC05_003, ov_SC05_004, ov_SC05_005, ov_SC05_006, ov_SC05_007, ov_SC05_008, ov_SC05_009, ov_SC05_010, ov_SC05_011, ov_SC05_017, ov_SC05_018, ov_SC05_019, ov_SC06_006, ov_SC06_008, ov_SC06_010, ov_SC06_011, ov_SC06_013, ov_SC06_014, ov_SC06_015, ov_SC06_016, ov_SC06_018, ov_SC06_020, ov_SC06_022, ov_SC06_024, ov_SC06_025, ov_SC06_027, ov_SC06_029, ov_SC06_030, ov_SC06_032, ov_SC06_033, ov_SC07_001, ov_SC07_002, ov_SC07_008, ov_SC07_009, ov_SC07_006, ov_SC07_007, ov_SC07_010, ov_SC07_011, ov_MAIN_012, ov_SC02_037, ov_SC03_107] + - id: E_func_8017BF84 + tier: h_exact + hash: 83fe509de7557aafe0dd06ba09a8bb19b2e4d025 + source: src/shared/engine_core.h + func: DEFINE_func_8017BF84 + vram: 0x8017BF84 + binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005] + - id: E_func_8017C5A0 + tier: h_exact + hash: 348e565cf48b71a3f80dbd0eee55996027eec0bb + source: src/shared/engine_core.h + func: DEFINE_func_8017C5A0 + vram: 0x8017C5A0 + binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005] + - id: E_func_8017BFE0 + tier: h_exact + hash: 9aa3999b278e86f80f37aa40ad25b69ea7a56c97 + source: src/shared/engine_core.h + func: DEFINE_func_8017BFE0 + vram: 0x8017BFE0 + binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005] + - id: E_func_8017C610 + tier: h_exact + hash: 8b587d3c36a734e6e88f82e9fb9dc892000c3441 + source: src/shared/engine_core.h + func: DEFINE_func_8017C610 + vram: 0x8017C610 + binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005] + - id: E_func_8017C800 + tier: h_exact + hash: 82e4577a4bd5316e0096e8e69872fd701b094b35 + source: src/shared/engine_core.h + func: DEFINE_func_8017C800 + vram: 0x8017C800 + binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005] + - id: E_func_8017C69C + tier: h_exact + hash: 930d41594f4bf211b0f9743dddf2e91395e5c0b9 + source: src/shared/engine_core.h + func: DEFINE_func_8017C69C + vram: 0x8017C69C + binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005] + - id: E_func_8017C064 + tier: h_exact + hash: aded4d04a82feae3887492ac28fc512c0e82b5d4 + source: src/shared/engine_core.h + func: DEFINE_func_8017C064 + vram: 0x8017C064 + binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005] + - id: E_func_8017C910 + tier: h_exact + hash: 78b65cae4a17b37f3512f01041f46cc9f5b28cd3 + source: src/shared/engine_core.h + func: DEFINE_func_8017C910 + vram: 0x8017C910 + binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005] diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8017AE2C.c b/src/ov_SC01_084/ov_SC01_084_jr_8017AE2C.c index 1ffed363ae..e7c4bf8732 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8017AE2C.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8017AE2C.c @@ -3361,23 +3361,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ #include "common.h" @@ -3390,26 +3374,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(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_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ /* func_8017C064 — entity tick with a two-mode "hit/shake" arm. @@ -3423,58 +3388,7 @@ void func_8017BFE0(Ent_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ #include "common.h" @@ -3622,26 +3536,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ #include "common.h" @@ -3651,30 +3546,7 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ #include "common.h" @@ -3685,37 +3557,7 @@ void func_8017C610(void *a0) * 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_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ #include "common.h" @@ -3770,40 +3612,7 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ #include "common.h" @@ -3827,54 +3636,6 @@ void func_8017C800(void *a0) DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910 prim; - Mtx8_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c b/src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c index 5887467b7c..257a59e804 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c @@ -3977,7 +3977,110 @@ void func_8017EEF4(u8 *a0) { } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017CA80", func_8017EF28); +#include "common.h" + +/* callees/globals — TU-compatible spellings (law 2: identical text to this TU's + existing file-scope decls; the rest are new and typed by access width). */ +extern void func_8012E9C0(s32 a0); /* already declared in this TU with an arg; + the .s calls it with NO argument (nop delay + slot, no `move $a0,$s0`) -> cast-call, the + engine_core.h house idiom */ +extern void func_8012A828(s32 a0, void *a1); +extern s32 D_8018A610; +extern void func_8018072C(); +extern s32 func_8004787C(s32 a0); +extern s32 func_80180720(s32 a0); +extern s16 D_801C774A; +extern u16 D_8018A6EC; +extern s16 D_8018A6EE; +extern s16 D_8018A6F0; +extern s16 D_8018A6F2; +extern s16 D_8018A6F4; +extern s16 D_8018A6F6; +extern s32 D_8018A6F8; +extern s32 D_8018A704; +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); +extern s32 func_8012C588(s32 a0, s32 a1); +extern s32 D_801270D0; + +void func_8017EF28(s32 a0) { + s16 buf[3]; + + if (*(u16 *)(a0 + 0x5C) & 1) { + ((void (*)(void))func_8012E9C0)(); + func_8012A828(a0, &D_8018A610); + *(s16 *)(a0 + 0x2) = 3; + *(s32 *)(a0 + 0x1C) = 0x14; + *(s16 *)(a0 + 0x5C) = 0; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = *(s16 *)(a0 + 0x62) + 0x800U & 0xFFF; + } else { + switch (*(u16 *)(a0 + 0x34)) { + case 0: + { + s32 t; + + *(u16 *)(a0 + 0xDC) = *(u16 *)(a0 + 0xDC) - D_8018A6EC; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = func_80180720(*(s16 *)(a0 + 0xDC)); + func_8018072C(*(s16 *)(a0 + 0xDC), + D_801C774A + (*(u8 *)(a0 + 0x70) - 1) * D_8018A6F4, + buf); + + t = D_8018A6F0 - D_8018A6F2 * *(s32 *)(a0 + 0x1C); + if (t < 0) { + t = 0; + } + buf[1] = buf[1] - t + 0x10; + + *(u16 *)(a0 + 0xE2) = *(u16 *)(a0 + 0xE2) + 0x70; + buf[1] += func_8004787C(*(s16 *)(a0 + 0xE2)) >> 8; + + *(u16 *)(a0 + 0x6) = buf[0]; + *(u16 *)(a0 + 0xA) = buf[1]; + *(u16 *)(a0 + 0xE) = buf[2]; + + if (*(s16 *)(a0 + 0xE0) == 0) { + if (func_8012D5E4(a0, (s32)&D_8018A704, (s32)&D_8018A704 + 8, 5)) { + *(s16 *)(a0 + 0xE0) = 1; + } + } + + if (*(s32 *)(a0 + 0x1C) == D_8018A6F6) { + func_8002D4C8(0x4B5, 0); + } + *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; + + if (*(s32 *)(a0 + 0x1C) >= D_8018A6EE) { + *(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1; + func_8012B14C(a0, (s32)&D_8018A6F8); + *(s32 *)(a0 + 0x1C) = 0x1E; + } + break; + } + case 1: + { + s16 sVar1; + + func_8012AD80(a0); + if (func_8012BEE8(a0)) { + sVar1 = *(s16 *)(a0 + 0x70); + if (sVar1 == 0x100) { + D_801270D0 = 0; + } else if ((sVar1 & 0xFF00) == 0) { + func_8012C588(0x26, 0); + } + func_8012C218((void *)a0); + } + break; + } + } + } +} + /* func_8017F198 — ov_SC01_084 / ov_SC01_084_jr_8017CA80 * 2-case dispatch on (*(s16*)(a0+0x70) & 0xFF00), then an indirect call through diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c b/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c index 4261d70f28..784698edf0 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c @@ -4397,7 +4397,114 @@ void func_80183068(void *a0) } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_80183244); +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8001D0E8(s32, s32, s32); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern s32 func_80143970(s32 a0); +extern void func_8012A828(s32 a0, void *a1); +extern void func_8012B23C(s32 a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_801807D8(s16 *a0); +extern u8 D_8018AB18[]; +extern u8 D_8018CE0C[]; +extern s16 D_8018AAE4; +extern s16 D_801C7748; +extern u8 D_8018AA7C[]; +extern unsigned char D_801A24C8; +extern u16 D_8018AABC; +extern u16 D_8018AABE; +extern u16 D_8018AAC0; +extern s32 D_801A1A10; + +void func_80183244(s32 param_1) { + s16 tmp[3]; + s16 vec[3]; + s16 t; + s32 e; + s32 frac; + s32 threshold; + s32 s2; + s32 sinRaw; + s32 cosRaw; + s32 sinVal; + s32 cosVal; + s32 sq0; + s32 sq1; + s32 ss; + s32 ptr; + + if (func_8012C354(param_1, (s32)D_8018AB18) == 0) { + return; + } + + if (*(s16 *)(param_1 + 0x70) != 0) { + func_8001C214(*(s32 *)(param_1 + 0x20), (s32)D_8018CE0C); + *(s32 *)(param_1 + 0x78) = (s32)&D_8018AAE4; + } + func_8001D0E8(*(s32 *)(param_1 + 0x20), 0xBE, 0x8C); + + *(s16 *)(param_1 + 0x100) = 0; + t = D_801C7748 + 0x800; + *(s16 *)(param_1 + 0xDC) = t; + e = t; + threshold = -(e * 1536) / 12288 - 0x22; + s2 = -(e * 160) / 12288 + 0x260; + frac = e & 0xFFF; + + sinRaw = func_80047948(frac); + sinVal = (sinRaw * s2) >> 12; + + cosRaw = func_8004787C(frac); + cosVal = (cosRaw * s2) >> 12; + + tmp[0] = (s16)sinVal; + tmp[1] = (s16)threshold; + tmp[2] = (s16)cosVal; + + *(s16 *)(param_1 + 0x6) = tmp[0]; + *(s16 *)(param_1 + 0xA) = tmp[1]; + *(s16 *)(param_1 + 0xE) = tmp[2]; + + func_80143970(param_1); + *(s32 *)(param_1 + 0xBC) = (s32)D_8018AA7C; + + if (*(s16 *)(param_1 + 0x70) == 2) { + *(s16 *)(param_1 + 0x2) = 0xD; + *(s16 *)(param_1 + 0x34) = 0; + func_8012A828(param_1, &D_801A24C8); + ptr = *(s32 *)(param_1 + 0x20); + *(s16 *)(param_1 + 0x5C) = 0; + *(s16 *)(param_1 + 0x5E) = 0; + *(s16 *)(ptr + 0x10) = 0xE00; + *(s16 *)(param_1 + 0x6) = D_8018AABC; + *(s16 *)(param_1 + 0xA) = D_8018AABE; + *(s16 *)(param_1 + 0xE) = D_8018AAC0; + func_8012B23C(param_1); + } else { + *(u8 *)(param_1 + 0xC1) = 0; + *(s16 *)(param_1 + 0x2) = 1; + *(s16 *)(param_1 + 0x34) = 0; + func_8012A828(param_1, &D_801A1A10); + + *(s32 *)(param_1 + 0x1C) = 0xA; + *(u16 *)(param_1 + 0x5C) |= 0x8000; + *(u16 *)(param_1 + 0xFC) ^= 1; + *(s16 *)(param_1 + 0x5E) = 0; + + vec[0] = *(u16 *)(param_1 + 0x6); + vec[1] = *(u16 *)(param_1 + 0xA); + vec[2] = *(u16 *)(param_1 + 0xE); + + sq0 = (s32)vec[0] * (s32)vec[0]; + sq1 = (s32)vec[2] * (s32)vec[2]; + ss = sq0 + sq1; + *(s16 *)(param_1 + 0xDE) = func_80047D3C(ss); + *(s16 *)(param_1 + 0xDC) = func_801807D8(vec); + } +} + void func_801834B8(u16 *param_1) { extern void func_80182A00(); diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8017AE2C.c b/src/ov_SC02_000/ov_SC02_000_jr_8017AE2C.c index a7690c84b6..e9e98a2881 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_8017AE2C.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_8017AE2C.c @@ -3340,23 +3340,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3368,26 +3352,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3403,58 +3368,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3582,26 +3496,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3610,64 +3505,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3711,95 +3553,14 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8017AE2C.c b/src/ov_SC02_003/ov_SC02_003_jr_8017AE2C.c index 5c207b0589..2bd15c0d9e 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8017AE2C.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8017AE2C.c @@ -3340,23 +3340,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3368,26 +3352,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3403,58 +3368,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3582,26 +3496,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3610,64 +3505,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3711,95 +3553,14 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8017AE2C.c b/src/ov_SC03_089/ov_SC03_089_jr_8017AE2C.c index d6e3e8f35f..17424e590e 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8017AE2C.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8017AE2C.c @@ -3342,23 +3342,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3370,26 +3354,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3405,58 +3370,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3584,26 +3498,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3612,64 +3507,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3713,94 +3555,13 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8017AE2C.c b/src/ov_SC03_090/ov_SC03_090_jr_8017AE2C.c index 995a4f3eda..5fb5f98f34 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_8017AE2C.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_8017AE2C.c @@ -3342,23 +3342,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3370,26 +3354,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3405,58 +3370,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3584,26 +3498,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3612,64 +3507,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3713,94 +3555,13 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8017AE2C.c b/src/ov_SC03_092/ov_SC03_092_jr_8017AE2C.c index c001d49458..ecbe86522e 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_8017AE2C.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_8017AE2C.c @@ -3345,23 +3345,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3373,26 +3357,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3408,58 +3373,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3587,26 +3501,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3615,64 +3510,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3716,95 +3558,14 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8017AE2C.c b/src/ov_SC03_101/ov_SC03_101_jr_8017AE2C.c index 36215e2249..fabfe47ead 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8017AE2C.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8017AE2C.c @@ -3342,23 +3342,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3370,26 +3354,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3405,58 +3370,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3584,26 +3498,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3612,64 +3507,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3713,94 +3555,13 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8017AE2C.c b/src/ov_SC03_104/ov_SC03_104_jr_8017AE2C.c index 6e2d3bc116..4791f95be5 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8017AE2C.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8017AE2C.c @@ -3342,23 +3342,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3370,26 +3354,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3405,58 +3370,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3584,26 +3498,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3612,64 +3507,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3713,94 +3555,13 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.c b/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.c index 436d428409..696bf6f00d 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.c @@ -3340,23 +3340,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3368,26 +3352,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3403,58 +3368,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3582,26 +3496,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3610,64 +3505,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3711,95 +3553,14 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ extern void func_8017CAF8(s32 arg0, s32 arg1, s32 arg2, s32 arg3); diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8017AE2C.c b/src/ov_SC05_005/ov_SC05_005_jr_8017AE2C.c index 91ce96ba8f..6316469fac 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_8017AE2C.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_8017AE2C.c @@ -3343,23 +3343,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */ // @class: plumbing // @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump -extern void func_8017C218(int); - -void func_8017BF84(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_8017C218(param_1); - return; -} +DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */ @@ -3371,26 +3355,7 @@ void func_8017BF84(int param_1) * 0x30 s32 suppress flag */ -extern void func_80147324(s32 arg0); -extern void func_8017C218(int); - -void func_8017BFE0(Ent_8017BFE0_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_8017BFE0 *))func_8017C218)(param_1); -} +DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */ @@ -3406,58 +3371,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1) * `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop. */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8014708C(void *arg0); -extern s32 func_801472C8(struct S *a0); -extern void func_8017C218(int); - -void func_8017C064(void *a0) -{ - void *obj; - s32 t; - s32 r; - s16 i; - u16 v; - u16 w; - u16 d; - - t = *(s32 *)((s32)a0 + 0x1C); - obj = *(void **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - 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; - } else { - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x2C) |= 0x10; - r = *(s32 *)((s32)obj + 0x20); - d = *(u16 *)(r + 0x1C) - 0x80; - *(s16 *)(r + 0x1C) = d; - *(s16 *)(r + 0x18) = d; - r = *(s32 *)((s32)obj + 0x20); - *(u16 *)(r + 0x1A) += 0x100; - } - i = 0; - do { - func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); - i++; - } while (i < 3); - } else { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - func_8014708C(obj); - func_801472C8((struct S *)obj); - } else { - *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; - } - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */ DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */ @@ -3585,26 +3499,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */ * `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths. */ -extern void func_8017C218(int); - -void func_8017C5A0(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_8017C218)(a0); -} +DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */ @@ -3613,64 +3508,11 @@ void func_8017C5A0(void *a0) { * counter unconditionally (gcc puts that store in the beqz delay slot), * then either slide @0x2A down by 0x10 or run the 3-call teardown. */ -extern void func_80147324(s32 arg0); -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_8017C218(int); - -void func_8017C610(void *a0) -{ - s32 t; - s32 *sub; - - t = *(s32 *)((s32)a0 + 0x1C); - sub = *(s32 **)((s32)a0 + 0x34); - *(s32 *)((s32)a0 + 0x1C) = t + 1; - if (t < 0x20) { - *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; - } else { - func_80147324(*(u16 *)((s32)a0 + 0x2C)); - func_80147084(sub); - func_801472B4(sub); - *(s32 *)((s32)a0 + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - ((void (*)(void *))func_8017C218)(a0); -} +DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */ -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_8017C218(int); - -void func_8017C69C(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_8017C218)(a0); -} +DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */ DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */ @@ -3714,95 +3556,14 @@ void func_8017C7C4(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_8017C800(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_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */ DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */ -void func_8017C910(void *a0) -{ - extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620"); - extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); - Prim_8017C910_8017C910 prim; - Mtx8_8017C910_8017C910 mtx; - s32 p; - - p = (s32)a0; - if (*(s32 *)(p + 0x2C) != 0) { - prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; - } else { - prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; - prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; - } - prim.v[0].x = *(u16 *)(p + 0x6); - prim.v[0].z = *(u16 *)(p + 0xE); - prim.v[1].x = *(u16 *)(p + 0x6); - prim.v[1].z = *(u16 *)(p + 0xE); - prim.col[0].b = 0; - prim.col[0].g = 0; - prim.col[0].r = 0; - switch (*(u32 *)(p + 0x30)) { - case 0: - prim.col[1].r = 0xFF; - prim.col[1].b = 0; - prim.col[1].g = 0; - break; - case 1: - prim.col[1].g = 0xFF; - prim.col[1].b = 0; - prim.col[1].r = 0; - break; - case 2: - prim.col[1].b = 0xFF; - prim.col[1].g = 0; - prim.col[1].r = 0; - break; - case 3: - prim.col[1].b = 0xFF; - prim.col[1].g = 0xFF; - prim.col[1].r = 0xFF; - break; - } - mtx = aD800AE620; - prim.tag = 0x50000000; - aFunc80016A5C(&prim, &mtx); -} +DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */ diff --git a/src/shared/engine_core.h b/src/shared/engine_core.h index 81a5249904..3b2b5d5528 100644 --- a/src/shared/engine_core.h +++ b/src/shared/engine_core.h @@ -83644,6 +83644,254 @@ } \ } +#define DEFINE_func_8017BF84() \ + extern void func_8017C218(int); \ + void func_8017BF84(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_8017C218(param_1); \ + return; \ + } + +#define DEFINE_func_8017C5A0() \ + extern void func_8017C218(int); \ + void func_8017C5A0(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_8017C218)(a0); \ + } + +#define DEFINE_func_8017BFE0() \ + extern void func_80147324(s32 arg0); \ + extern void func_8017C218(int); \ + void func_8017BFE0(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_8017C218)(param_1); \ + } + +#define DEFINE_func_8017C610() \ + extern void func_80147324(s32 arg0); \ + extern void func_80147084(s32 *a0); \ + extern void func_801472B4(void *a0); \ + extern void func_8017C218(int); \ + void func_8017C610(void *a0) \ + { \ + s32 t; \ + s32 *sub; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + sub = *(s32 **)((s32)a0 + 0x34); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + if (t < 0x20) { \ + *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; \ + } else { \ + func_80147324(*(u16 *)((s32)a0 + 0x2C)); \ + func_80147084(sub); \ + func_801472B4(sub); \ + *(s32 *)((s32)a0 + 0x1C) = 0; \ + *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; \ + } \ + ((void (*)(void *))func_8017C218)(a0); \ + } + +#define DEFINE_func_8017C800() \ + extern int rand(void); \ + void func_8017C800(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_8017C69C() \ + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \ + extern void func_8017C218(int); \ + void func_8017C69C(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_8017C218)(a0); \ + } + +#define DEFINE_func_8017C064() \ + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \ + extern void func_8014708C(void *arg0); \ + extern s32 func_801472C8(struct S *a0); \ + extern void func_8017C218(int); \ + void func_8017C064(void *a0) \ + { \ + void *obj; \ + s32 t; \ + s32 r; \ + s16 i; \ + u16 v; \ + u16 w; \ + u16 d; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + obj = *(void **)((s32)a0 + 0x34); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + if (t < 0x20) { \ + if (*(s32 *)((s32)a0 + 0x30) == 0) { \ + 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; \ + } else { \ + r = *(s32 *)((s32)obj + 0x20); \ + *(u16 *)(r + 0x2C) |= 0x10; \ + r = *(s32 *)((s32)obj + 0x20); \ + d = *(u16 *)(r + 0x1C) - 0x80; \ + *(s16 *)(r + 0x1C) = d; \ + *(s16 *)(r + 0x18) = d; \ + r = *(s32 *)((s32)obj + 0x20); \ + *(u16 *)(r + 0x1A) += 0x100; \ + } \ + i = 0; \ + do { \ + func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); \ + i++; \ + } while (i < 3); \ + } else { \ + if (*(s32 *)((s32)a0 + 0x30) == 0) { \ + func_8014708C(obj); \ + func_801472C8((struct S *)obj); \ + } else { \ + *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; \ + } \ + *(s32 *)((s32)a0 + 0x1C) = 0; \ + *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; \ + } \ + ((void (*)(void *))func_8017C218)(a0); \ + } + +#define DEFINE_func_8017C910() \ + void func_8017C910(void *a0) \ + { \ + extern Mtx8_8017C910 aD800AE620 __asm__("D_800AE620"); \ + extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); \ + Prim_8017C910 prim; \ + Mtx8_8017C910 mtx; \ + s32 p; \ + p = (s32)a0; \ + if (*(s32 *)(p + 0x2C) != 0) { \ + prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; \ + prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; \ + } else { \ + prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; \ + prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; \ + } \ + prim.v[0].x = *(u16 *)(p + 0x6); \ + prim.v[0].z = *(u16 *)(p + 0xE); \ + prim.v[1].x = *(u16 *)(p + 0x6); \ + prim.v[1].z = *(u16 *)(p + 0xE); \ + prim.col[0].b = 0; \ + prim.col[0].g = 0; \ + prim.col[0].r = 0; \ + switch (*(u32 *)(p + 0x30)) { \ + case 0: \ + prim.col[1].r = 0xFF; \ + prim.col[1].b = 0; \ + prim.col[1].g = 0; \ + break; \ + case 1: \ + prim.col[1].g = 0xFF; \ + prim.col[1].b = 0; \ + prim.col[1].r = 0; \ + break; \ + case 2: \ + prim.col[1].b = 0xFF; \ + prim.col[1].g = 0; \ + prim.col[1].r = 0; \ + break; \ + case 3: \ + prim.col[1].b = 0xFF; \ + prim.col[1].g = 0xFF; \ + prim.col[1].r = 0xFF; \ + break; \ + } \ + mtx = aD800AE620; \ + prim.tag = 0x50000000; \ + aFunc80016A5C(&prim, &mtx); \ + } + #endif #define DEFINE_func_80128EA8() \ @@ -196693,4 +196941,252 @@ } \ } +#define DEFINE_func_8017BF84() \ + extern void func_8017C218(int); \ + void func_8017BF84(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_8017C218(param_1); \ + return; \ + } + +#define DEFINE_func_8017C5A0() \ + extern void func_8017C218(int); \ + void func_8017C5A0(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_8017C218)(a0); \ + } + +#define DEFINE_func_8017BFE0() \ + extern void func_80147324(s32 arg0); \ + extern void func_8017C218(int); \ + void func_8017BFE0(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_8017C218)(param_1); \ + } + +#define DEFINE_func_8017C610() \ + extern void func_80147324(s32 arg0); \ + extern void func_80147084(s32 *a0); \ + extern void func_801472B4(void *a0); \ + extern void func_8017C218(int); \ + void func_8017C610(void *a0) \ + { \ + s32 t; \ + s32 *sub; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + sub = *(s32 **)((s32)a0 + 0x34); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + if (t < 0x20) { \ + *(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; \ + } else { \ + func_80147324(*(u16 *)((s32)a0 + 0x2C)); \ + func_80147084(sub); \ + func_801472B4(sub); \ + *(s32 *)((s32)a0 + 0x1C) = 0; \ + *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; \ + } \ + ((void (*)(void *))func_8017C218)(a0); \ + } + +#define DEFINE_func_8017C800() \ + extern int rand(void); \ + void func_8017C800(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_8017C69C() \ + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \ + extern void func_8017C218(int); \ + void func_8017C69C(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_8017C218)(a0); \ + } + +#define DEFINE_func_8017C064() \ + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \ + extern void func_8014708C(void *arg0); \ + extern s32 func_801472C8(struct S *a0); \ + extern void func_8017C218(int); \ + void func_8017C064(void *a0) \ + { \ + void *obj; \ + s32 t; \ + s32 r; \ + s16 i; \ + u16 v; \ + u16 w; \ + u16 d; \ + t = *(s32 *)((s32)a0 + 0x1C); \ + obj = *(void **)((s32)a0 + 0x34); \ + *(s32 *)((s32)a0 + 0x1C) = t + 1; \ + if (t < 0x20) { \ + if (*(s32 *)((s32)a0 + 0x30) == 0) { \ + 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; \ + } else { \ + r = *(s32 *)((s32)obj + 0x20); \ + *(u16 *)(r + 0x2C) |= 0x10; \ + r = *(s32 *)((s32)obj + 0x20); \ + d = *(u16 *)(r + 0x1C) - 0x80; \ + *(s16 *)(r + 0x1C) = d; \ + *(s16 *)(r + 0x18) = d; \ + r = *(s32 *)((s32)obj + 0x20); \ + *(u16 *)(r + 0x1A) += 0x100; \ + } \ + i = 0; \ + do { \ + func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); \ + i++; \ + } while (i < 3); \ + } else { \ + if (*(s32 *)((s32)a0 + 0x30) == 0) { \ + func_8014708C(obj); \ + func_801472C8((struct S *)obj); \ + } else { \ + *(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; \ + } \ + *(s32 *)((s32)a0 + 0x1C) = 0; \ + *(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; \ + } \ + ((void (*)(void *))func_8017C218)(a0); \ + } + +#define DEFINE_func_8017C910() \ + void func_8017C910(void *a0) \ + { \ + extern Mtx8_8017C910 aD800AE620 __asm__("D_800AE620"); \ + extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); \ + Prim_8017C910 prim; \ + Mtx8_8017C910 mtx; \ + s32 p; \ + p = (s32)a0; \ + if (*(s32 *)(p + 0x2C) != 0) { \ + prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; \ + prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; \ + } else { \ + prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; \ + prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; \ + } \ + prim.v[0].x = *(u16 *)(p + 0x6); \ + prim.v[0].z = *(u16 *)(p + 0xE); \ + prim.v[1].x = *(u16 *)(p + 0x6); \ + prim.v[1].z = *(u16 *)(p + 0xE); \ + prim.col[0].b = 0; \ + prim.col[0].g = 0; \ + prim.col[0].r = 0; \ + switch (*(u32 *)(p + 0x30)) { \ + case 0: \ + prim.col[1].r = 0xFF; \ + prim.col[1].b = 0; \ + prim.col[1].g = 0; \ + break; \ + case 1: \ + prim.col[1].g = 0xFF; \ + prim.col[1].b = 0; \ + prim.col[1].r = 0; \ + break; \ + case 2: \ + prim.col[1].b = 0xFF; \ + prim.col[1].g = 0; \ + prim.col[1].r = 0; \ + break; \ + case 3: \ + prim.col[1].b = 0xFF; \ + prim.col[1].g = 0xFF; \ + prim.col[1].r = 0xFF; \ + break; \ + } \ + mtx = aD800AE620; \ + prim.tag = 0x50000000; \ + aFunc80016A5C(&prim, &mtx); \ + } + #endif