feat(phase-30 S48-T6): propagate func_8017BEF8 to its zero-crack siblings

This commit is contained in:
Drew T
2026-08-12 18:26:45 -06:00
parent db2f5fefb3
commit 79be5b1ed9
3 changed files with 225 additions and 3 deletions
+75 -1
View File
@@ -3329,7 +3329,81 @@ void func_8017BEBC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017AE2C", func_8017BEF8);
typedef struct {
SVECTOR_8016E7C8 v[4]; /* 0x00 */
s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */
u8 f6; /* 0x38 */
u8 pad[7]; /* -> 0x40 */
} Prim_8016E7C8_8017BEF8;
extern s32 func_800D21C4(s32 a0, void *a1, s32 a2);
extern s32 rand(void);
extern s32 ratan2(s32 a0, s32 a1);
extern void func_8001382C(s32 a0, void *a1, void *a2);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146C3C(void);
void func_8017BEF8(void *a0) {
extern char D_80188A48[];
extern char D_80188A68[];
extern s32 D_80188A70;
s32 node;
s32 r1, r2, r3;
s32 w, mag;
u32 v;
s32 t;
s32 vec[3];
s32 ang32;
s16 ang;
node = func_800D21C4((s32)a0, D_80188A48, 0x26);
*(s32 *)((s32)a0 + 0x20) = node;
if (node != 0) {
*(u16 *)(node + 0x28) = 0x234;
*(u16 *)(node + 0x2A) = 0x1C0;
*(u32 *)(node + 4) |= 0x8000000;
r1 = rand();
r2 = rand();
w = (r1 & 3) << 17;
mag = ((r2 & 3) << 15) + 0x40000;
D_80188A70 = w + mag;
v = *(u32 *)((s32)a0 + 0x2C);
t = v >> 20;
vec[0] = t & 0x3FF;
if (t & 0x200) {
vec[0] |= 0xFFFFFE00;
} else {
vec[0] = t & 0x1FF;
}
v = *(u32 *)((s32)a0 + 0x2C);
t = v;
vec[2] = t & 0x3FF;
if (t & 0x200) {
vec[2] |= 0xFFFFFE00;
} else {
vec[2] = t & 0x1FF;
}
ang32 = ratan2(vec[0], vec[2]);
r3 = rand();
ang32 = ang32 - 0x1C7;
ang = ang32 + (r3 & 7) * 113;
*(s16 *)(node + 0x14) = ang;
func_8001382C(ang, D_80188A68, vec);
*(s32 *)((s32)a0 + 0x10) = vec[0];
*(s32 *)((s32)a0 + 0x18) = vec[2];
*(s32 *)((s32)a0 + 0x14) = 0xFFFC0000;
func_80146E90(a0, (rand() & 7) | 8);
*(u16 *)((s32)a0 + 2) += 1;
} else {
((void (*)(s32))func_80146C3C)((s32)a0);
}
}
DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */
+75 -1
View File
@@ -3329,7 +3329,81 @@ void func_8017BEBC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017AE2C", func_8017BEF8);
typedef struct {
SVECTOR_8016E7C8 v[4]; /* 0x00 */
s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */
u8 f6; /* 0x38 */
u8 pad[7]; /* -> 0x40 */
} Prim_8016E7C8_8017BEF8;
extern s32 func_800D21C4(s32 a0, void *a1, s32 a2);
extern s32 rand(void);
extern s32 ratan2(s32 a0, s32 a1);
extern void func_8001382C(s32 a0, void *a1, void *a2);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146C3C(void);
void func_8017BEF8(void *a0) {
extern char D_80196D10[];
extern char D_80196D30[];
extern s32 D_80196D38;
s32 node;
s32 r1, r2, r3;
s32 w, mag;
u32 v;
s32 t;
s32 vec[3];
s32 ang32;
s16 ang;
node = func_800D21C4((s32)a0, D_80196D10, 0x26);
*(s32 *)((s32)a0 + 0x20) = node;
if (node != 0) {
*(u16 *)(node + 0x28) = 0x234;
*(u16 *)(node + 0x2A) = 0x1C0;
*(u32 *)(node + 4) |= 0x8000000;
r1 = rand();
r2 = rand();
w = (r1 & 3) << 17;
mag = ((r2 & 3) << 15) + 0x40000;
D_80196D38 = w + mag;
v = *(u32 *)((s32)a0 + 0x2C);
t = v >> 20;
vec[0] = t & 0x3FF;
if (t & 0x200) {
vec[0] |= 0xFFFFFE00;
} else {
vec[0] = t & 0x1FF;
}
v = *(u32 *)((s32)a0 + 0x2C);
t = v;
vec[2] = t & 0x3FF;
if (t & 0x200) {
vec[2] |= 0xFFFFFE00;
} else {
vec[2] = t & 0x1FF;
}
ang32 = ratan2(vec[0], vec[2]);
r3 = rand();
ang32 = ang32 - 0x1C7;
ang = ang32 + (r3 & 7) * 113;
*(s16 *)(node + 0x14) = ang;
func_8001382C(ang, D_80196D30, vec);
*(s32 *)((s32)a0 + 0x10) = vec[0];
*(s32 *)((s32)a0 + 0x18) = vec[2];
*(s32 *)((s32)a0 + 0x14) = 0xFFFC0000;
func_80146E90(a0, (rand() & 7) | 8);
*(u16 *)((s32)a0 + 2) += 1;
} else {
((void (*)(s32))func_80146C3C)((s32)a0);
}
}
DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */
+75 -1
View File
@@ -3329,7 +3329,81 @@ void func_8017BEBC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017AE2C", func_8017BEF8);
typedef struct {
SVECTOR_8016E7C8 v[4]; /* 0x00 */
s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */
u8 f6; /* 0x38 */
u8 pad[7]; /* -> 0x40 */
} Prim_8016E7C8_8017BEF8;
extern s32 func_800D21C4(s32 a0, void *a1, s32 a2);
extern s32 rand(void);
extern s32 ratan2(s32 a0, s32 a1);
extern void func_8001382C(s32 a0, void *a1, void *a2);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146C3C(void);
void func_8017BEF8(void *a0) {
extern char D_80195220[];
extern char D_80195240[];
extern s32 D_80195248;
s32 node;
s32 r1, r2, r3;
s32 w, mag;
u32 v;
s32 t;
s32 vec[3];
s32 ang32;
s16 ang;
node = func_800D21C4((s32)a0, D_80195220, 0x26);
*(s32 *)((s32)a0 + 0x20) = node;
if (node != 0) {
*(u16 *)(node + 0x28) = 0x234;
*(u16 *)(node + 0x2A) = 0x1C0;
*(u32 *)(node + 4) |= 0x8000000;
r1 = rand();
r2 = rand();
w = (r1 & 3) << 17;
mag = ((r2 & 3) << 15) + 0x40000;
D_80195248 = w + mag;
v = *(u32 *)((s32)a0 + 0x2C);
t = v >> 20;
vec[0] = t & 0x3FF;
if (t & 0x200) {
vec[0] |= 0xFFFFFE00;
} else {
vec[0] = t & 0x1FF;
}
v = *(u32 *)((s32)a0 + 0x2C);
t = v;
vec[2] = t & 0x3FF;
if (t & 0x200) {
vec[2] |= 0xFFFFFE00;
} else {
vec[2] = t & 0x1FF;
}
ang32 = ratan2(vec[0], vec[2]);
r3 = rand();
ang32 = ang32 - 0x1C7;
ang = ang32 + (r3 & 7) * 113;
*(s16 *)(node + 0x14) = ang;
func_8001382C(ang, D_80195240, vec);
*(s32 *)((s32)a0 + 0x10) = vec[0];
*(s32 *)((s32)a0 + 0x18) = vec[2];
*(s32 *)((s32)a0 + 0x14) = 0xFFFC0000;
func_80146E90(a0, (rand() & 7) | 8);
*(u16 *)((s32)a0 + 2) += 1;
} else {
((void (*)(s32))func_80146C3C)((s32)a0);
}
}
DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */