mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-04 08:21:50 -04:00
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:
@@ -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) */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user