From d89958b34117d8521ca93d3d797e911904bc4ff1 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Fri, 14 Aug 2026 11:08:47 -0600 Subject: [PATCH] feat(phase-30 S49): propagate func_8017D808 (adapt lane) --- config/dedup.us.yaml | 7 +++ src/ov_SC01_005/ov_SC01_005_jr_8017C340.c | 37 +------------ src/ov_SC01_006/ov_SC01_006_jr_8017C340.c | 37 +------------ src/shared/engine_core.h | 66 +++++++++++++++++++++++ 4 files changed, 75 insertions(+), 72 deletions(-) diff --git a/config/dedup.us.yaml b/config/dedup.us.yaml index fd36b744a..979e6cb49 100644 --- a/config/dedup.us.yaml +++ b/config/dedup.us.yaml @@ -14551,3 +14551,10 @@ groups: func: DEFINE_func_8017CF5C vram: 0x8017CF5C binaries: [ov_SC01_008, ov_SC06_006] + - id: E_func_8017D808 + tier: h_exact + hash: 89463c3facc6d1a362caf245011d3b88539e5432 + source: src/shared/engine_core.h + func: DEFINE_func_8017D808 + vram: 0x8017D808 + binaries: [ov_SC01_005, ov_SC01_006] diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8017C340.c b/src/ov_SC01_005/ov_SC01_005_jr_8017C340.c index 11421abbb..84f9b7de0 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_8017C340.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_8017C340.c @@ -3352,42 +3352,7 @@ void func_8017D7A4(void *a0) { DEFINE_func_8017D7E0() /* dedup: shared engine-core @0x8017D7E0 (src/shared) */ -extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); -extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); - -void func_8017D808(s32 param_1, s16 *param_2) { - MATRIX m1; - SVECTOR svec_in; - SVECTOR svec_out; - - *(s32 *)(param_1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x8), (s32)*(s16 *)(param_1 + 0xC), 0xa); - *(s32 *)(param_1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x10), (s32)*(s16 *)(param_1 + 0x14), 0xa); - *(s16 *)(param_1 + 0x18) = func_80012ABC((s32)*(s16 *)(param_1 + 0x18), (s32)*(s16 *)(param_1 + 0x20), 0xa); - *(s16 *)(param_1 + 0x1A) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1A), (s32)*(s16 *)(param_1 + 0x22), 0xa); - *(s16 *)(param_1 + 0x1C) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1C), (s32)*(s16 *)(param_1 + 0x24), 0xa); - *(s16 *)(param_1 + 0x28) = func_80012C6C((s32)*(s16 *)(param_1 + 0x28), (s32)*(s16 *)(param_1 + 0x2E), 0xa); - *(s16 *)(param_1 + 0x2A) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2A), (s32)*(s16 *)(param_1 + 0x30), 0xa); - *(s16 *)(param_1 + 0x2C) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2C), (s32)*(s16 *)(param_1 + 0x32), 0xa); - - *(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + (s32)param_2[0]; - *(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + (s32)param_2[1]; - *(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + (s32)param_2[2]; - func_80049CAC(param_1 + 0x18, (s32)&m1); - - m1.t[0] = *(s16 *)(param_1 + 0x28) + param_2[0]; - m1.t[1] = *(s16 *)(param_1 + 0x2A) + param_2[1]; - m1.t[2] = *(s16 *)(param_1 + 0x2C) + param_2[2]; - svec_in.vx = 0; - svec_in.vy = 0; - svec_in.vz = *(s32 *)(param_1 + 0x10); - ((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out); - - *(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx; - *(s32 *)(param_1 + 0x40) = (s32)svec_out.vy; - *(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; -} +DEFINE_func_8017D808() /* dedup: shared engine-core @0x8017D808 (src/shared) */ INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017C340", func_8017D9A0); diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8017C340.c b/src/ov_SC01_006/ov_SC01_006_jr_8017C340.c index 7652468ce..852ed1b6d 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8017C340.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8017C340.c @@ -3351,42 +3351,7 @@ void func_8017D7A4(void *a0) { DEFINE_func_8017D7E0() /* dedup: shared engine-core @0x8017D7E0 (src/shared) */ -extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); -extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); - -void func_8017D808(s32 param_1, s16 *param_2) { - MATRIX m1; - SVECTOR svec_in; - SVECTOR svec_out; - - *(s32 *)(param_1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x8), (s32)*(s16 *)(param_1 + 0xC), 0xa); - *(s32 *)(param_1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x10), (s32)*(s16 *)(param_1 + 0x14), 0xa); - *(s16 *)(param_1 + 0x18) = func_80012ABC((s32)*(s16 *)(param_1 + 0x18), (s32)*(s16 *)(param_1 + 0x20), 0xa); - *(s16 *)(param_1 + 0x1A) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1A), (s32)*(s16 *)(param_1 + 0x22), 0xa); - *(s16 *)(param_1 + 0x1C) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1C), (s32)*(s16 *)(param_1 + 0x24), 0xa); - *(s16 *)(param_1 + 0x28) = func_80012C6C((s32)*(s16 *)(param_1 + 0x28), (s32)*(s16 *)(param_1 + 0x2E), 0xa); - *(s16 *)(param_1 + 0x2A) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2A), (s32)*(s16 *)(param_1 + 0x30), 0xa); - *(s16 *)(param_1 + 0x2C) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2C), (s32)*(s16 *)(param_1 + 0x32), 0xa); - - *(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + (s32)param_2[0]; - *(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + (s32)param_2[1]; - *(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + (s32)param_2[2]; - func_80049CAC(param_1 + 0x18, (s32)&m1); - - m1.t[0] = *(s16 *)(param_1 + 0x28) + param_2[0]; - m1.t[1] = *(s16 *)(param_1 + 0x2A) + param_2[1]; - m1.t[2] = *(s16 *)(param_1 + 0x2C) + param_2[2]; - svec_in.vx = 0; - svec_in.vy = 0; - svec_in.vz = *(s32 *)(param_1 + 0x10); - ((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out); - - *(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx; - *(s32 *)(param_1 + 0x40) = (s32)svec_out.vy; - *(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; -} +DEFINE_func_8017D808() /* dedup: shared engine-core @0x8017D808 (src/shared) */ INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017D9A0); diff --git a/src/shared/engine_core.h b/src/shared/engine_core.h index d28be9c49..eb36b558f 100644 --- a/src/shared/engine_core.h +++ b/src/shared/engine_core.h @@ -60361,6 +60361,39 @@ func_800D1EBC(); \ } +#define DEFINE_func_8017D808() \ + extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); \ + extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); \ + extern void func_80049CAC(s32 a0, s32 a1); \ + extern void func_8012F14C(s32 a0, s32 a1, s32 a2); \ + void func_8017D808(s32 param_1, s16 *param_2) { \ + MATRIX m1; \ + SVECTOR svec_in; \ + SVECTOR svec_out; \ + *(s32 *)(param_1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x8), (s32)*(s16 *)(param_1 + 0xC), 0xa); \ + *(s32 *)(param_1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x10), (s32)*(s16 *)(param_1 + 0x14), 0xa); \ + *(s16 *)(param_1 + 0x18) = func_80012ABC((s32)*(s16 *)(param_1 + 0x18), (s32)*(s16 *)(param_1 + 0x20), 0xa); \ + *(s16 *)(param_1 + 0x1A) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1A), (s32)*(s16 *)(param_1 + 0x22), 0xa); \ + *(s16 *)(param_1 + 0x1C) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1C), (s32)*(s16 *)(param_1 + 0x24), 0xa); \ + *(s16 *)(param_1 + 0x28) = func_80012C6C((s32)*(s16 *)(param_1 + 0x28), (s32)*(s16 *)(param_1 + 0x2E), 0xa); \ + *(s16 *)(param_1 + 0x2A) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2A), (s32)*(s16 *)(param_1 + 0x30), 0xa); \ + *(s16 *)(param_1 + 0x2C) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2C), (s32)*(s16 *)(param_1 + 0x32), 0xa); \ + *(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + (s32)param_2[0]; \ + *(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + (s32)param_2[1]; \ + *(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + (s32)param_2[2]; \ + func_80049CAC(param_1 + 0x18, (s32)&m1); \ + m1.t[0] = *(s16 *)(param_1 + 0x28) + param_2[0]; \ + m1.t[1] = *(s16 *)(param_1 + 0x2A) + param_2[1]; \ + m1.t[2] = *(s16 *)(param_1 + 0x2C) + param_2[2]; \ + svec_in.vx = 0; \ + svec_in.vy = 0; \ + svec_in.vz = *(s32 *)(param_1 + 0x10); \ + ((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out); \ + *(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx; \ + *(s32 *)(param_1 + 0x40) = (s32)svec_out.vy; \ + *(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; \ + } + #endif #define DEFINE_func_80128EA8() \ @@ -150127,4 +150160,37 @@ func_800D1EBC(); \ } +#define DEFINE_func_8017D808() \ + extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); \ + extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); \ + extern void func_80049CAC(s32 a0, s32 a1); \ + extern void func_8012F14C(s32 a0, s32 a1, s32 a2); \ + void func_8017D808(s32 param_1, s16 *param_2) { \ + MATRIX m1; \ + SVECTOR svec_in; \ + SVECTOR svec_out; \ + *(s32 *)(param_1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x8), (s32)*(s16 *)(param_1 + 0xC), 0xa); \ + *(s32 *)(param_1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x10), (s32)*(s16 *)(param_1 + 0x14), 0xa); \ + *(s16 *)(param_1 + 0x18) = func_80012ABC((s32)*(s16 *)(param_1 + 0x18), (s32)*(s16 *)(param_1 + 0x20), 0xa); \ + *(s16 *)(param_1 + 0x1A) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1A), (s32)*(s16 *)(param_1 + 0x22), 0xa); \ + *(s16 *)(param_1 + 0x1C) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1C), (s32)*(s16 *)(param_1 + 0x24), 0xa); \ + *(s16 *)(param_1 + 0x28) = func_80012C6C((s32)*(s16 *)(param_1 + 0x28), (s32)*(s16 *)(param_1 + 0x2E), 0xa); \ + *(s16 *)(param_1 + 0x2A) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2A), (s32)*(s16 *)(param_1 + 0x30), 0xa); \ + *(s16 *)(param_1 + 0x2C) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2C), (s32)*(s16 *)(param_1 + 0x32), 0xa); \ + *(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + (s32)param_2[0]; \ + *(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + (s32)param_2[1]; \ + *(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + (s32)param_2[2]; \ + func_80049CAC(param_1 + 0x18, (s32)&m1); \ + m1.t[0] = *(s16 *)(param_1 + 0x28) + param_2[0]; \ + m1.t[1] = *(s16 *)(param_1 + 0x2A) + param_2[1]; \ + m1.t[2] = *(s16 *)(param_1 + 0x2C) + param_2[2]; \ + svec_in.vx = 0; \ + svec_in.vy = 0; \ + svec_in.vz = *(s32 *)(param_1 + 0x10); \ + ((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out); \ + *(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx; \ + *(s32 *)(param_1 + 0x40) = (s32)svec_out.vy; \ + *(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; \ + } + #endif