feat(phase-29 crack-wave3): func_80169BBC banked ×1 in ov_SC01_077 (162 ins)

First clean bank of crack-wave 3 (8 fresh cached ov077 substantial families,
8/8 MATCH). Other 7 pending §58 reconcile; ×138 propagation to follow.
This commit is contained in:
Drew T
2026-07-19 10:28:57 -06:00
parent 1ad5cc359a
commit 6a367f4246
+78 -1
View File
@@ -5926,7 +5926,84 @@ void func_80169B80(void *a0) {
D_80189BF4[*(u16 *)((s32)a0 + 0x2)]();
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_8015AE2C", func_80169BBC);
#include "common.h"
extern s32 D_801269A4;
extern s32 D_801269A8;
extern s32 D_801269AC;
extern u16 D_80189B48[];
extern u8 D_80189BB8[];
extern u8 D_80189BE8[];
extern u8 D_801DA9C8[];
extern void func_800D2318(void);
extern void RotMatrixYXZ(void *a0, void *a1);
extern void ApplyMatrixSV(void *a0, void *a1, void *a2);
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern s32 func_800D222C(void *a0, void *a1, s32 a2);
extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2);
extern s32 ratan2(s32 a0, s32 a1);
extern void func_80048D9C(void *a0, void *a1);
extern void func_80128EA8(s32 a0, s32 a1, s32 a2);
extern void func_80146C3C(void);
void func_80169BBC(s32 arg0) {
u16 rot[4];
s16 vec[4];
s32 pos[4];
s16 mtx[16];
s32 p1;
s32 s2;
func_800D2318();
rot[0] = *(u16 *)(arg0 + 0x12);
rot[1] = *(u16 *)(arg0 + 0x16);
rot[2] = 0;
RotMatrixYXZ(rot, mtx);
vec[0] = 0;
vec[1] = -2;
vec[2] = -0x14;
ApplyMatrixSV(mtx, vec, vec);
*(u16 *)(arg0 + 6) = *(u16 *)(arg0 + 6) + (u16)vec[0];
*(u16 *)(arg0 + 0xA) = *(u16 *)(arg0 + 0xA) + (u16)vec[1];
*(u16 *)(arg0 + 0xE) = *(u16 *)(arg0 + 0xE) + (u16)vec[2];
p1 = func_80146A6C(9, (void *)arg0, *(s16 *)(arg0 + 6), *(s16 *)(arg0 + 0xA),
*(s16 *)(arg0 + 0xE), 0, 0);
if (p1 != 0) {
*(u16 *)(p1 + 0x12) = rot[0];
*(u16 *)(p1 + 0x16) = rot[1];
*(u16 *)(p1 + 0x1A) = rot[2];
}
func_80146A6C(0xC, (void *)arg0, *(s16 *)(arg0 + 6), *(s16 *)(arg0 + 0xA),
*(s16 *)(arg0 + 0xE), 0, 0);
s2 = func_800D222C((void *)arg0, D_80189BE8, 0x17);
if (s2 != 0) {
*(s32 *)(arg0 + 0x20) = s2;
rot[0] = rot[0] + D_80189B48[*(s32 *)(arg0 + 0x30)];
rot[1] = rot[1] - 0x400;
RotMatrixYXZ(rot, mtx);
pos[0] = D_801269A4 - *(s16 *)(arg0 + 6);
pos[1] = D_801269A8 - *(s16 *)(arg0 + 0xA);
pos[2] = D_801269AC - *(s16 *)(arg0 + 0xE);
ApplyTransposeMatrixLV(mtx, pos, pos);
rot[2] = -ratan2(pos[0], pos[1]);
vec[0] = 0x400;
vec[1] = -0x400;
vec[2] = 0;
RotMatrixYXZ(vec, mtx);
*(s32 *)(s2 + 0x34) = (s32)D_801DA9C8;
RotMatrixYXZ(rot, D_801DA9C8);
func_80048D9C(D_801DA9C8, mtx);
*(u16 *)(s2 + 0x18) = 0x5000;
*(u16 *)(s2 + 0x1A) = 0x2000;
*(s32 *)(s2 + 4) = *(s32 *)(s2 + 4) | 0xC000140;
func_80128EA8(s2, arg0 + 0x24, (s32)D_80189BB8);
*(u16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1;
} else {
((void (*)(s32))func_80146C3C)(arg0);
}
}
DEFINE_func_80169E44() /* dedup: shared engine-core @0x80169E44 (src/shared) */