From f281c6cf472567d0befd161118a0d21e6ff1697e Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sat, 18 Jul 2026 12:23:00 -0600 Subject: [PATCH] feat(phase-29 crack-wave): func_801670E4 partial sweep (4 members; 133 blocked on def-sig) --- src/ov_SC07_006/ov_SC07_006_jr_8013F350.c | 173 +++++++++++++++++++++- src/ov_SC07_007/ov_SC07_007_jr_8013F350.c | 173 +++++++++++++++++++++- src/ov_SC07_010/ov_SC07_010_o2b.c | 173 +++++++++++++++++++++- src/ov_SC07_011/ov_SC07_011_jr_8013F350.c | 173 +++++++++++++++++++++- 4 files changed, 688 insertions(+), 4 deletions(-) diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c b/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c index 2873d75a11..fcd7ccf07d 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c @@ -9140,7 +9140,178 @@ INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80166F5 INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8016706C); -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801670E4); + +// @class: schedule +// @stuck: 16/279 masked. 3 runs, ONE residual class: gcc's list-scheduler puts `la $s2` (p=DATA) + `addu $s4,$zero,$zero` (i=0) BEFORE the callee-arg address setup (addiu $a1,$sp,0x10 / addu $a2,$a1,$zero); the target emits them AFTER. Inert to ~40 statement-order permutations + pin/barrier combos (sched priority dominates the LUID tie-break, sched.c rank_for_schedule). Runs: 19-24 (blk1), 111-114 (region-B cx-load rotation), 177-182 (blk3). Permuter fuel. + + + + +extern void func_80149350(s32); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); + + +s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { + + extern u8 D_8018D310[]; + extern u8 D_8018D2FC[]; + extern u8 D_8018D324[]; + extern s32 D_801269A4; + extern s32 D_801269A8; + extern s32 D_801269AC; + extern u16 D_80126CE0; + Fr_801670E4 f; + register u8 *p __asm__("$18"); /* $s2 */ + register s32 ent __asm__("$19"); /* $s3 */ + s16 i; + s32 d; + s32 node; + u16 c; + u8 cv; + u8 cv2; + register s32 gA __asm__("$2"); + register s32 cxv __asm__("$4"); + register s32 czv __asm__("$5"); + u8 *vc; + u8 *ap; + u8 *mp; + u8 *va; + u8 *vb; + + ent = arg0; + node = *(s32 *)(ent + 0x34); + f.v[1].z = 0; + f.v[1].y = 0; + f.v[1].x = 0; + f.v[3].z = 0; + f.v[2].z = 0; + f.v[0].z = 0; + f.col[1].b = 0x70; + cv = *(u8 *)(ent + 0x12); + f.cx = arg1; + __asm__ __volatile__(""); + va = (u8 *)&f.cx; + __asm__ __volatile__("" : "=r"(va) : "0"(va)); + f.cy = arg2; + vb = va; + __asm__ __volatile__("" : "=r"(vb) : "0"(vb)); + p = D_8018D310; + i = 0; + f.col[0].b = 0; + f.col[0].g = 0; + f.col[0].r = 0; + f.col[2].b = 0; + f.col[2].g = 0; + f.col[2].r = 0; + f.col[3].b = 0; + f.col[3].g = 0; + f.col[3].r = 0; + f.code = 0x50000000; + f.cz = arg3; + f.col[1].r = cv; + f.col[1].g = cv; + ((void (*)(s32, void *, void *))func_80149350)(node, va, vb); + + c = f.cx; + *(s16 *)(ent + 0x06) = c; + *(s32 *)(ent + 0x4C) = (s16)c; + c = f.cy; + *(s16 *)(ent + 0x0A) = c; + *(s32 *)(ent + 0x50) = (s16)c; + c = f.cz; + *(s16 *)(ent + 0x0E) = c; + *(s32 *)(ent + 0x54) = (s16)c; + func_800D20C0(&f.cx, f.a8, 7); + func_80017E68(&f.cx, f.m1); + func_800D23D0(f.a8); + RotMatrixYXZ(f.a8, f.m1); + + do { + f.v[0].x = (s8)*p++; + f.v[0].y = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].y = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].y = (s8)*p--; + func_80017758(f.v, f.m1); + } while ((i = i + 1) < 4); + + p = D_8018D2FC; + gA = 0xA0; + cxv = (s16)f.cx; + f.col[1].g = gA; + gA = D_801269A4; + czv = (s16)f.cz; + f.col[1].b = 0x10; + f.col[1].r = 0x10; + f.pos[0] = gA - cxv; + i = 0; + f.v[3].y = 0; + f.v[2].y = 0; + f.v[0].y = 0; + f.pos[1] = D_801269A8 - (s16)f.cy; + f.pos[2] = D_801269AC - czv; + + do { + f.v[0].x = (s8)*p++; + f.v[0].z = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].z = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].z = (s8)*p--; + func_80017758(f.v, (void *)(ent + 0x38)); + } while ((i = i + 1) < 4); + + if (*(s32 *)(ent + 0x30) > 0) { + vc = (u8 *)&f.cx; + __asm__ __volatile__("" : "=r"(vc) : "0"(vc)); + mp = f.m1; + ap = mp; + __asm__ __volatile__("" : "=r"(ap) : "0"(ap)); + p = D_8018D324; + i = 0; + d = (s16)f.a8[0] >> 6; + f.cx += d; + f.cy += d; + f.cz += d; + func_80017E68(vc, ap); + f.cx = f.cy = f.cz = ((u32)*(s32 *)(ent + 0x30) >> 1) + D_80126CE0 * 0x20; + func_80017DC4(&f.cx, f.m2); + func_80048EAC(f.m2, mp); + f.v[3].z = 0; + f.v[2].z = 0; + f.v[0].z = 0; + cv2 = *(u8 *)(ent + 0x12); + f.col[1].b = 0x20; + f.col[1].r = 0x20; + f.col[3].b = 0; + f.col[3].r = 0; + f.col[2].b = 0; + f.col[2].r = 0; + f.col[0].b = 0; + f.col[0].r = 0; + f.col[3].g = 0; + f.col[2].g = 0; + f.col[0].g = 0; + f.col[1].g = cv2 + 0x60; + do { + f.v[0].x = (s8)*p++; + f.v[0].y = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].y = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].y = (s8)*p--; + func_80017758(f.v, f.m1); + } while ((i = i + 1) < 8); + } +} + INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80167540); diff --git a/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c b/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c index d7f46f0310..e6466f82ed 100644 --- a/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c +++ b/src/ov_SC07_007/ov_SC07_007_jr_8013F350.c @@ -9140,7 +9140,178 @@ INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80166F5 INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8016706C); -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801670E4); + +// @class: schedule +// @stuck: 16/279 masked. 3 runs, ONE residual class: gcc's list-scheduler puts `la $s2` (p=DATA) + `addu $s4,$zero,$zero` (i=0) BEFORE the callee-arg address setup (addiu $a1,$sp,0x10 / addu $a2,$a1,$zero); the target emits them AFTER. Inert to ~40 statement-order permutations + pin/barrier combos (sched priority dominates the LUID tie-break, sched.c rank_for_schedule). Runs: 19-24 (blk1), 111-114 (region-B cx-load rotation), 177-182 (blk3). Permuter fuel. + + + + +extern void func_80149350(s32); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); + + +s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { + + extern u8 D_80185E34[]; + extern u8 D_80185E20[]; + extern u8 D_80185E48[]; + extern s32 D_801269A4; + extern s32 D_801269A8; + extern s32 D_801269AC; + extern u16 D_80126CE0; + Fr_801670E4 f; + register u8 *p __asm__("$18"); /* $s2 */ + register s32 ent __asm__("$19"); /* $s3 */ + s16 i; + s32 d; + s32 node; + u16 c; + u8 cv; + u8 cv2; + register s32 gA __asm__("$2"); + register s32 cxv __asm__("$4"); + register s32 czv __asm__("$5"); + u8 *vc; + u8 *ap; + u8 *mp; + u8 *va; + u8 *vb; + + ent = arg0; + node = *(s32 *)(ent + 0x34); + f.v[1].z = 0; + f.v[1].y = 0; + f.v[1].x = 0; + f.v[3].z = 0; + f.v[2].z = 0; + f.v[0].z = 0; + f.col[1].b = 0x70; + cv = *(u8 *)(ent + 0x12); + f.cx = arg1; + __asm__ __volatile__(""); + va = (u8 *)&f.cx; + __asm__ __volatile__("" : "=r"(va) : "0"(va)); + f.cy = arg2; + vb = va; + __asm__ __volatile__("" : "=r"(vb) : "0"(vb)); + p = D_80185E34; + i = 0; + f.col[0].b = 0; + f.col[0].g = 0; + f.col[0].r = 0; + f.col[2].b = 0; + f.col[2].g = 0; + f.col[2].r = 0; + f.col[3].b = 0; + f.col[3].g = 0; + f.col[3].r = 0; + f.code = 0x50000000; + f.cz = arg3; + f.col[1].r = cv; + f.col[1].g = cv; + ((void (*)(s32, void *, void *))func_80149350)(node, va, vb); + + c = f.cx; + *(s16 *)(ent + 0x06) = c; + *(s32 *)(ent + 0x4C) = (s16)c; + c = f.cy; + *(s16 *)(ent + 0x0A) = c; + *(s32 *)(ent + 0x50) = (s16)c; + c = f.cz; + *(s16 *)(ent + 0x0E) = c; + *(s32 *)(ent + 0x54) = (s16)c; + func_800D20C0(&f.cx, f.a8, 7); + func_80017E68(&f.cx, f.m1); + func_800D23D0(f.a8); + RotMatrixYXZ(f.a8, f.m1); + + do { + f.v[0].x = (s8)*p++; + f.v[0].y = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].y = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].y = (s8)*p--; + func_80017758(f.v, f.m1); + } while ((i = i + 1) < 4); + + p = D_80185E20; + gA = 0xA0; + cxv = (s16)f.cx; + f.col[1].g = gA; + gA = D_801269A4; + czv = (s16)f.cz; + f.col[1].b = 0x10; + f.col[1].r = 0x10; + f.pos[0] = gA - cxv; + i = 0; + f.v[3].y = 0; + f.v[2].y = 0; + f.v[0].y = 0; + f.pos[1] = D_801269A8 - (s16)f.cy; + f.pos[2] = D_801269AC - czv; + + do { + f.v[0].x = (s8)*p++; + f.v[0].z = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].z = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].z = (s8)*p--; + func_80017758(f.v, (void *)(ent + 0x38)); + } while ((i = i + 1) < 4); + + if (*(s32 *)(ent + 0x30) > 0) { + vc = (u8 *)&f.cx; + __asm__ __volatile__("" : "=r"(vc) : "0"(vc)); + mp = f.m1; + ap = mp; + __asm__ __volatile__("" : "=r"(ap) : "0"(ap)); + p = D_80185E48; + i = 0; + d = (s16)f.a8[0] >> 6; + f.cx += d; + f.cy += d; + f.cz += d; + func_80017E68(vc, ap); + f.cx = f.cy = f.cz = ((u32)*(s32 *)(ent + 0x30) >> 1) + D_80126CE0 * 0x20; + func_80017DC4(&f.cx, f.m2); + func_80048EAC(f.m2, mp); + f.v[3].z = 0; + f.v[2].z = 0; + f.v[0].z = 0; + cv2 = *(u8 *)(ent + 0x12); + f.col[1].b = 0x20; + f.col[1].r = 0x20; + f.col[3].b = 0; + f.col[3].r = 0; + f.col[2].b = 0; + f.col[2].r = 0; + f.col[0].b = 0; + f.col[0].r = 0; + f.col[3].g = 0; + f.col[2].g = 0; + f.col[0].g = 0; + f.col[1].g = cv2 + 0x60; + do { + f.v[0].x = (s8)*p++; + f.v[0].y = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].y = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].y = (s8)*p--; + func_80017758(f.v, f.m1); + } while ((i = i + 1) < 8); + } +} + INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80167540); diff --git a/src/ov_SC07_010/ov_SC07_010_o2b.c b/src/ov_SC07_010/ov_SC07_010_o2b.c index 9f9f078d83..521e193d30 100644 --- a/src/ov_SC07_010/ov_SC07_010_o2b.c +++ b/src/ov_SC07_010/ov_SC07_010_o2b.c @@ -9875,7 +9875,178 @@ INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_80166F58); INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_8016706C); -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_801670E4); + +// @class: schedule +// @stuck: 16/279 masked. 3 runs, ONE residual class: gcc's list-scheduler puts `la $s2` (p=DATA) + `addu $s4,$zero,$zero` (i=0) BEFORE the callee-arg address setup (addiu $a1,$sp,0x10 / addu $a2,$a1,$zero); the target emits them AFTER. Inert to ~40 statement-order permutations + pin/barrier combos (sched priority dominates the LUID tie-break, sched.c rank_for_schedule). Runs: 19-24 (blk1), 111-114 (region-B cx-load rotation), 177-182 (blk3). Permuter fuel. + + + + +extern void func_80149350(s32); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); + + +s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { + + extern u8 D_80184EC4[]; + extern u8 D_80184EB0[]; + extern u8 D_80184ED8[]; + extern s32 D_801269A4; + extern s32 D_801269A8; + extern s32 D_801269AC; + extern u16 D_80126CE0; + Fr_801670E4 f; + register u8 *p __asm__("$18"); /* $s2 */ + register s32 ent __asm__("$19"); /* $s3 */ + s16 i; + s32 d; + s32 node; + u16 c; + u8 cv; + u8 cv2; + register s32 gA __asm__("$2"); + register s32 cxv __asm__("$4"); + register s32 czv __asm__("$5"); + u8 *vc; + u8 *ap; + u8 *mp; + u8 *va; + u8 *vb; + + ent = arg0; + node = *(s32 *)(ent + 0x34); + f.v[1].z = 0; + f.v[1].y = 0; + f.v[1].x = 0; + f.v[3].z = 0; + f.v[2].z = 0; + f.v[0].z = 0; + f.col[1].b = 0x70; + cv = *(u8 *)(ent + 0x12); + f.cx = arg1; + __asm__ __volatile__(""); + va = (u8 *)&f.cx; + __asm__ __volatile__("" : "=r"(va) : "0"(va)); + f.cy = arg2; + vb = va; + __asm__ __volatile__("" : "=r"(vb) : "0"(vb)); + p = D_80184EC4; + i = 0; + f.col[0].b = 0; + f.col[0].g = 0; + f.col[0].r = 0; + f.col[2].b = 0; + f.col[2].g = 0; + f.col[2].r = 0; + f.col[3].b = 0; + f.col[3].g = 0; + f.col[3].r = 0; + f.code = 0x50000000; + f.cz = arg3; + f.col[1].r = cv; + f.col[1].g = cv; + ((void (*)(s32, void *, void *))func_80149350)(node, va, vb); + + c = f.cx; + *(s16 *)(ent + 0x06) = c; + *(s32 *)(ent + 0x4C) = (s16)c; + c = f.cy; + *(s16 *)(ent + 0x0A) = c; + *(s32 *)(ent + 0x50) = (s16)c; + c = f.cz; + *(s16 *)(ent + 0x0E) = c; + *(s32 *)(ent + 0x54) = (s16)c; + func_800D20C0(&f.cx, f.a8, 7); + func_80017E68(&f.cx, f.m1); + func_800D23D0(f.a8); + RotMatrixYXZ(f.a8, f.m1); + + do { + f.v[0].x = (s8)*p++; + f.v[0].y = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].y = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].y = (s8)*p--; + func_80017758(f.v, f.m1); + } while ((i = i + 1) < 4); + + p = D_80184EB0; + gA = 0xA0; + cxv = (s16)f.cx; + f.col[1].g = gA; + gA = D_801269A4; + czv = (s16)f.cz; + f.col[1].b = 0x10; + f.col[1].r = 0x10; + f.pos[0] = gA - cxv; + i = 0; + f.v[3].y = 0; + f.v[2].y = 0; + f.v[0].y = 0; + f.pos[1] = D_801269A8 - (s16)f.cy; + f.pos[2] = D_801269AC - czv; + + do { + f.v[0].x = (s8)*p++; + f.v[0].z = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].z = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].z = (s8)*p--; + func_80017758(f.v, (void *)(ent + 0x38)); + } while ((i = i + 1) < 4); + + if (*(s32 *)(ent + 0x30) > 0) { + vc = (u8 *)&f.cx; + __asm__ __volatile__("" : "=r"(vc) : "0"(vc)); + mp = f.m1; + ap = mp; + __asm__ __volatile__("" : "=r"(ap) : "0"(ap)); + p = D_80184ED8; + i = 0; + d = (s16)f.a8[0] >> 6; + f.cx += d; + f.cy += d; + f.cz += d; + func_80017E68(vc, ap); + f.cx = f.cy = f.cz = ((u32)*(s32 *)(ent + 0x30) >> 1) + D_80126CE0 * 0x20; + func_80017DC4(&f.cx, f.m2); + func_80048EAC(f.m2, mp); + f.v[3].z = 0; + f.v[2].z = 0; + f.v[0].z = 0; + cv2 = *(u8 *)(ent + 0x12); + f.col[1].b = 0x20; + f.col[1].r = 0x20; + f.col[3].b = 0; + f.col[3].r = 0; + f.col[2].b = 0; + f.col[2].r = 0; + f.col[0].b = 0; + f.col[0].r = 0; + f.col[3].g = 0; + f.col[2].g = 0; + f.col[0].g = 0; + f.col[1].g = cv2 + 0x60; + do { + f.v[0].x = (s8)*p++; + f.v[0].y = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].y = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].y = (s8)*p--; + func_80017758(f.v, f.m1); + } while ((i = i + 1) < 8); + } +} + INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_80167540); diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c b/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c index a8410f2bcf..0876203671 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c @@ -9136,7 +9136,178 @@ INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80166F5 INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8016706C); -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801670E4); + +// @class: schedule +// @stuck: 16/279 masked. 3 runs, ONE residual class: gcc's list-scheduler puts `la $s2` (p=DATA) + `addu $s4,$zero,$zero` (i=0) BEFORE the callee-arg address setup (addiu $a1,$sp,0x10 / addu $a2,$a1,$zero); the target emits them AFTER. Inert to ~40 statement-order permutations + pin/barrier combos (sched priority dominates the LUID tie-break, sched.c rank_for_schedule). Runs: 19-24 (blk1), 111-114 (region-B cx-load rotation), 177-182 (blk3). Permuter fuel. + + + + +extern void func_80149350(s32); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); + + +s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { + + extern u8 D_80181584[]; + extern u8 D_80181570[]; + extern u8 D_80181598[]; + extern s32 D_801269A4; + extern s32 D_801269A8; + extern s32 D_801269AC; + extern u16 D_80126CE0; + Fr_801670E4 f; + register u8 *p __asm__("$18"); /* $s2 */ + register s32 ent __asm__("$19"); /* $s3 */ + s16 i; + s32 d; + s32 node; + u16 c; + u8 cv; + u8 cv2; + register s32 gA __asm__("$2"); + register s32 cxv __asm__("$4"); + register s32 czv __asm__("$5"); + u8 *vc; + u8 *ap; + u8 *mp; + u8 *va; + u8 *vb; + + ent = arg0; + node = *(s32 *)(ent + 0x34); + f.v[1].z = 0; + f.v[1].y = 0; + f.v[1].x = 0; + f.v[3].z = 0; + f.v[2].z = 0; + f.v[0].z = 0; + f.col[1].b = 0x70; + cv = *(u8 *)(ent + 0x12); + f.cx = arg1; + __asm__ __volatile__(""); + va = (u8 *)&f.cx; + __asm__ __volatile__("" : "=r"(va) : "0"(va)); + f.cy = arg2; + vb = va; + __asm__ __volatile__("" : "=r"(vb) : "0"(vb)); + p = D_80181584; + i = 0; + f.col[0].b = 0; + f.col[0].g = 0; + f.col[0].r = 0; + f.col[2].b = 0; + f.col[2].g = 0; + f.col[2].r = 0; + f.col[3].b = 0; + f.col[3].g = 0; + f.col[3].r = 0; + f.code = 0x50000000; + f.cz = arg3; + f.col[1].r = cv; + f.col[1].g = cv; + ((void (*)(s32, void *, void *))func_80149350)(node, va, vb); + + c = f.cx; + *(s16 *)(ent + 0x06) = c; + *(s32 *)(ent + 0x4C) = (s16)c; + c = f.cy; + *(s16 *)(ent + 0x0A) = c; + *(s32 *)(ent + 0x50) = (s16)c; + c = f.cz; + *(s16 *)(ent + 0x0E) = c; + *(s32 *)(ent + 0x54) = (s16)c; + func_800D20C0(&f.cx, f.a8, 7); + func_80017E68(&f.cx, f.m1); + func_800D23D0(f.a8); + RotMatrixYXZ(f.a8, f.m1); + + do { + f.v[0].x = (s8)*p++; + f.v[0].y = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].y = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].y = (s8)*p--; + func_80017758(f.v, f.m1); + } while ((i = i + 1) < 4); + + p = D_80181570; + gA = 0xA0; + cxv = (s16)f.cx; + f.col[1].g = gA; + gA = D_801269A4; + czv = (s16)f.cz; + f.col[1].b = 0x10; + f.col[1].r = 0x10; + f.pos[0] = gA - cxv; + i = 0; + f.v[3].y = 0; + f.v[2].y = 0; + f.v[0].y = 0; + f.pos[1] = D_801269A8 - (s16)f.cy; + f.pos[2] = D_801269AC - czv; + + do { + f.v[0].x = (s8)*p++; + f.v[0].z = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].z = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].z = (s8)*p--; + func_80017758(f.v, (void *)(ent + 0x38)); + } while ((i = i + 1) < 4); + + if (*(s32 *)(ent + 0x30) > 0) { + vc = (u8 *)&f.cx; + __asm__ __volatile__("" : "=r"(vc) : "0"(vc)); + mp = f.m1; + ap = mp; + __asm__ __volatile__("" : "=r"(ap) : "0"(ap)); + p = D_80181598; + i = 0; + d = (s16)f.a8[0] >> 6; + f.cx += d; + f.cy += d; + f.cz += d; + func_80017E68(vc, ap); + f.cx = f.cy = f.cz = ((u32)*(s32 *)(ent + 0x30) >> 1) + D_80126CE0 * 0x20; + func_80017DC4(&f.cx, f.m2); + func_80048EAC(f.m2, mp); + f.v[3].z = 0; + f.v[2].z = 0; + f.v[0].z = 0; + cv2 = *(u8 *)(ent + 0x12); + f.col[1].b = 0x20; + f.col[1].r = 0x20; + f.col[3].b = 0; + f.col[3].r = 0; + f.col[2].b = 0; + f.col[2].r = 0; + f.col[0].b = 0; + f.col[0].r = 0; + f.col[3].g = 0; + f.col[2].g = 0; + f.col[0].g = 0; + f.col[1].g = cv2 + 0x60; + do { + f.v[0].x = (s8)*p++; + f.v[0].y = (s8)*p++; + f.v[2].x = (s8)*p++; + f.v[2].y = (s8)*p++; + f.v[3].x = (s8)*p++; + f.v[3].y = (s8)*p--; + func_80017758(f.v, f.m1); + } while ((i = i + 1) < 8); + } +} + INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80167540);