feat(decomp): S67-wave gate — +2 fns x8 propagated (fleet 99.2%)

This commit is contained in:
Drew T
2026-08-31 10:34:40 -06:00
parent 257b9d8a3b
commit 274057d132
14 changed files with 844 additions and 2472 deletions
+56
View File
@@ -15489,3 +15489,59 @@ groups:
func: DEFINE_func_80132F40
vram: 0x80132F40
binaries: [ov_SC01_077, ov_SC01_005, ov_SC01_006, ov_SC03_001, ov_SC01_000, ov_SC01_001, ov_SC02_000, ov_SC02_003, ov_SC03_002, ov_SC03_006, ov_SC04_000, ov_SC04_018, ov_SC04_019, ov_SC05_000, ov_SC06_000, ov_SC07_000, ov_SC01_004, ov_SC01_008, ov_SC01_009, ov_SC01_074, ov_SC01_080, ov_SC01_084, ov_SC02_004, ov_SC02_005, ov_SC02_011, ov_SC02_015, ov_SC02_016, ov_SC02_017, ov_SC02_021, ov_SC02_026, ov_SC02_027, ov_SC02_028, ov_SC02_031, ov_SC02_035, ov_SC02_039, ov_SC02_041, ov_SC03_003, ov_SC03_007, ov_SC03_010, ov_SC03_011, ov_SC03_012, ov_SC03_013, ov_SC03_014, ov_SC03_015, ov_SC03_023, ov_SC03_024, ov_SC03_028, ov_SC03_029, ov_SC03_030, ov_SC03_031, ov_SC03_089, ov_SC03_090, ov_SC03_091, ov_SC03_092, ov_SC03_093, ov_SC03_094, ov_SC03_095, ov_SC03_096, ov_SC03_097, ov_SC03_098, ov_SC03_099, ov_SC03_100, ov_SC03_101, ov_SC03_102, ov_SC03_103, ov_SC03_104, ov_SC03_105, ov_SC03_108, ov_SC03_109, ov_SC03_110, ov_SC03_111, ov_SC03_112, ov_SC03_113, ov_SC03_114, ov_SC03_115, ov_SC03_116, ov_SC03_117, ov_SC03_118, ov_SC03_119, ov_SC03_121, ov_SC03_124, ov_SC03_125, ov_SC03_126, ov_SC04_002, ov_SC04_003, ov_SC04_004, ov_SC04_005, ov_SC04_006, ov_SC04_007, ov_SC04_008, ov_SC04_009, ov_SC04_010, ov_SC04_011, ov_SC04_012, ov_SC04_015, ov_SC04_016, ov_SC04_020, ov_SC04_021, ov_SC05_001, ov_SC05_002, ov_SC05_003, ov_SC05_004, ov_SC05_005, ov_SC05_006, ov_SC05_007, ov_SC05_008, ov_SC05_009, ov_SC05_010, ov_SC05_011, ov_SC05_017, ov_SC05_018, ov_SC05_019, ov_SC06_006, ov_SC06_008, ov_SC06_010, ov_SC06_011, ov_SC06_013, ov_SC06_014, ov_SC06_015, ov_SC06_016, ov_SC06_018, ov_SC06_020, ov_SC06_022, ov_SC06_024, ov_SC06_025, ov_SC06_027, ov_SC06_029, ov_SC06_030, ov_SC06_032, ov_SC06_033, ov_SC07_001, ov_SC07_002, ov_SC07_008, ov_SC07_009, ov_SC07_006, ov_SC07_007, ov_SC07_010, ov_SC07_011, ov_MAIN_012, ov_SC02_037, ov_SC03_107]
- id: E_func_8017BF84
tier: h_exact
hash: 83fe509de7557aafe0dd06ba09a8bb19b2e4d025
source: src/shared/engine_core.h
func: DEFINE_func_8017BF84
vram: 0x8017BF84
binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005]
- id: E_func_8017C5A0
tier: h_exact
hash: 348e565cf48b71a3f80dbd0eee55996027eec0bb
source: src/shared/engine_core.h
func: DEFINE_func_8017C5A0
vram: 0x8017C5A0
binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005]
- id: E_func_8017BFE0
tier: h_exact
hash: 9aa3999b278e86f80f37aa40ad25b69ea7a56c97
source: src/shared/engine_core.h
func: DEFINE_func_8017BFE0
vram: 0x8017BFE0
binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005]
- id: E_func_8017C610
tier: h_exact
hash: 8b587d3c36a734e6e88f82e9fb9dc892000c3441
source: src/shared/engine_core.h
func: DEFINE_func_8017C610
vram: 0x8017C610
binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005]
- id: E_func_8017C800
tier: h_exact
hash: 82e4577a4bd5316e0096e8e69872fd701b094b35
source: src/shared/engine_core.h
func: DEFINE_func_8017C800
vram: 0x8017C800
binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005]
- id: E_func_8017C69C
tier: h_exact
hash: 930d41594f4bf211b0f9743dddf2e91395e5c0b9
source: src/shared/engine_core.h
func: DEFINE_func_8017C69C
vram: 0x8017C69C
binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005]
- id: E_func_8017C064
tier: h_exact
hash: aded4d04a82feae3887492ac28fc512c0e82b5d4
source: src/shared/engine_core.h
func: DEFINE_func_8017C064
vram: 0x8017C064
binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005]
- id: E_func_8017C910
tier: h_exact
hash: 78b65cae4a17b37f3512f01041f46cc9f5b28cd3
source: src/shared/engine_core.h
func: DEFINE_func_8017C910
vram: 0x8017C910
binaries: [ov_SC02_000, ov_SC02_003, ov_SC01_084, ov_SC03_089, ov_SC03_090, ov_SC03_092, ov_SC03_101, ov_SC03_104, ov_SC04_011, ov_SC05_005]
+8 -247
View File
@@ -3361,23 +3361,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
#include "common.h"
@@ -3390,26 +3374,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
/* func_8017C064 — entity tick with a two-mode "hit/shake" arm.
@@ -3423,58 +3388,7 @@ void func_8017BFE0(Ent_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
#include "common.h"
@@ -3622,26 +3536,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
#include "common.h"
@@ -3651,30 +3546,7 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
#include "common.h"
@@ -3685,37 +3557,7 @@ void func_8017C610(void *a0)
* bumps the state word at +0x2, then tail-calls the shared advance helper.
* §3-T4: target is `slti 0x20 ; beqz else` => `if (t < 0x20) { then } else { reset }`. */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
#include "common.h"
@@ -3770,40 +3612,7 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
#include "common.h"
@@ -3827,54 +3636,6 @@ void func_8017C800(void *a0)
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910 prim;
Mtx8_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+104 -1
View File
@@ -3977,7 +3977,110 @@ void func_8017EEF4(u8 *a0) {
}
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017CA80", func_8017EF28);
#include "common.h"
/* callees/globals — TU-compatible spellings (law 2: identical text to this TU's
existing file-scope decls; the rest are new and typed by access width). */
extern void func_8012E9C0(s32 a0); /* already declared in this TU with an arg;
the .s calls it with NO argument (nop delay
slot, no `move $a0,$s0`) -> cast-call, the
engine_core.h house idiom */
extern void func_8012A828(s32 a0, void *a1);
extern s32 D_8018A610;
extern void func_8018072C();
extern s32 func_8004787C(s32 a0);
extern s32 func_80180720(s32 a0);
extern s16 D_801C774A;
extern u16 D_8018A6EC;
extern s16 D_8018A6EE;
extern s16 D_8018A6F0;
extern s16 D_8018A6F2;
extern s16 D_8018A6F4;
extern s16 D_8018A6F6;
extern s32 D_8018A6F8;
extern s32 D_8018A704;
extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8012B14C(s32 a0, s32 a1);
extern void func_8012AD80(s32 a0);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012C218(void *a0);
extern s32 func_8012C588(s32 a0, s32 a1);
extern s32 D_801270D0;
void func_8017EF28(s32 a0) {
s16 buf[3];
if (*(u16 *)(a0 + 0x5C) & 1) {
((void (*)(void))func_8012E9C0)();
func_8012A828(a0, &D_8018A610);
*(s16 *)(a0 + 0x2) = 3;
*(s32 *)(a0 + 0x1C) = 0x14;
*(s16 *)(a0 + 0x5C) = 0;
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = *(s16 *)(a0 + 0x62) + 0x800U & 0xFFF;
} else {
switch (*(u16 *)(a0 + 0x34)) {
case 0:
{
s32 t;
*(u16 *)(a0 + 0xDC) = *(u16 *)(a0 + 0xDC) - D_8018A6EC;
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = func_80180720(*(s16 *)(a0 + 0xDC));
func_8018072C(*(s16 *)(a0 + 0xDC),
D_801C774A + (*(u8 *)(a0 + 0x70) - 1) * D_8018A6F4,
buf);
t = D_8018A6F0 - D_8018A6F2 * *(s32 *)(a0 + 0x1C);
if (t < 0) {
t = 0;
}
buf[1] = buf[1] - t + 0x10;
*(u16 *)(a0 + 0xE2) = *(u16 *)(a0 + 0xE2) + 0x70;
buf[1] += func_8004787C(*(s16 *)(a0 + 0xE2)) >> 8;
*(u16 *)(a0 + 0x6) = buf[0];
*(u16 *)(a0 + 0xA) = buf[1];
*(u16 *)(a0 + 0xE) = buf[2];
if (*(s16 *)(a0 + 0xE0) == 0) {
if (func_8012D5E4(a0, (s32)&D_8018A704, (s32)&D_8018A704 + 8, 5)) {
*(s16 *)(a0 + 0xE0) = 1;
}
}
if (*(s32 *)(a0 + 0x1C) == D_8018A6F6) {
func_8002D4C8(0x4B5, 0);
}
*(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1;
if (*(s32 *)(a0 + 0x1C) >= D_8018A6EE) {
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
func_8012B14C(a0, (s32)&D_8018A6F8);
*(s32 *)(a0 + 0x1C) = 0x1E;
}
break;
}
case 1:
{
s16 sVar1;
func_8012AD80(a0);
if (func_8012BEE8(a0)) {
sVar1 = *(s16 *)(a0 + 0x70);
if (sVar1 == 0x100) {
D_801270D0 = 0;
} else if ((sVar1 & 0xFF00) == 0) {
func_8012C588(0x26, 0);
}
func_8012C218((void *)a0);
}
break;
}
}
}
}
/* func_8017F198 — ov_SC01_084 / ov_SC01_084_jr_8017CA80
* 2-case dispatch on (*(s16*)(a0+0x70) & 0xFF00), then an indirect call through
+108 -1
View File
@@ -4397,7 +4397,114 @@ void func_80183068(void *a0)
}
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_80183244);
extern s32 func_8012C354(s32 a0, s32 a1);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8001D0E8(s32, s32, s32);
extern s32 func_80047948(s32 a0);
extern s32 func_8004787C(s32 a0);
extern s32 func_80143970(s32 a0);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B23C(s32 a0);
extern s32 func_80047D3C(s32 a0);
extern s32 func_801807D8(s16 *a0);
extern u8 D_8018AB18[];
extern u8 D_8018CE0C[];
extern s16 D_8018AAE4;
extern s16 D_801C7748;
extern u8 D_8018AA7C[];
extern unsigned char D_801A24C8;
extern u16 D_8018AABC;
extern u16 D_8018AABE;
extern u16 D_8018AAC0;
extern s32 D_801A1A10;
void func_80183244(s32 param_1) {
s16 tmp[3];
s16 vec[3];
s16 t;
s32 e;
s32 frac;
s32 threshold;
s32 s2;
s32 sinRaw;
s32 cosRaw;
s32 sinVal;
s32 cosVal;
s32 sq0;
s32 sq1;
s32 ss;
s32 ptr;
if (func_8012C354(param_1, (s32)D_8018AB18) == 0) {
return;
}
if (*(s16 *)(param_1 + 0x70) != 0) {
func_8001C214(*(s32 *)(param_1 + 0x20), (s32)D_8018CE0C);
*(s32 *)(param_1 + 0x78) = (s32)&D_8018AAE4;
}
func_8001D0E8(*(s32 *)(param_1 + 0x20), 0xBE, 0x8C);
*(s16 *)(param_1 + 0x100) = 0;
t = D_801C7748 + 0x800;
*(s16 *)(param_1 + 0xDC) = t;
e = t;
threshold = -(e * 1536) / 12288 - 0x22;
s2 = -(e * 160) / 12288 + 0x260;
frac = e & 0xFFF;
sinRaw = func_80047948(frac);
sinVal = (sinRaw * s2) >> 12;
cosRaw = func_8004787C(frac);
cosVal = (cosRaw * s2) >> 12;
tmp[0] = (s16)sinVal;
tmp[1] = (s16)threshold;
tmp[2] = (s16)cosVal;
*(s16 *)(param_1 + 0x6) = tmp[0];
*(s16 *)(param_1 + 0xA) = tmp[1];
*(s16 *)(param_1 + 0xE) = tmp[2];
func_80143970(param_1);
*(s32 *)(param_1 + 0xBC) = (s32)D_8018AA7C;
if (*(s16 *)(param_1 + 0x70) == 2) {
*(s16 *)(param_1 + 0x2) = 0xD;
*(s16 *)(param_1 + 0x34) = 0;
func_8012A828(param_1, &D_801A24C8);
ptr = *(s32 *)(param_1 + 0x20);
*(s16 *)(param_1 + 0x5C) = 0;
*(s16 *)(param_1 + 0x5E) = 0;
*(s16 *)(ptr + 0x10) = 0xE00;
*(s16 *)(param_1 + 0x6) = D_8018AABC;
*(s16 *)(param_1 + 0xA) = D_8018AABE;
*(s16 *)(param_1 + 0xE) = D_8018AAC0;
func_8012B23C(param_1);
} else {
*(u8 *)(param_1 + 0xC1) = 0;
*(s16 *)(param_1 + 0x2) = 1;
*(s16 *)(param_1 + 0x34) = 0;
func_8012A828(param_1, &D_801A1A10);
*(s32 *)(param_1 + 0x1C) = 0xA;
*(u16 *)(param_1 + 0x5C) |= 0x8000;
*(u16 *)(param_1 + 0xFC) ^= 1;
*(s16 *)(param_1 + 0x5E) = 0;
vec[0] = *(u16 *)(param_1 + 0x6);
vec[1] = *(u16 *)(param_1 + 0xA);
vec[2] = *(u16 *)(param_1 + 0xE);
sq0 = (s32)vec[0] * (s32)vec[0];
sq1 = (s32)vec[2] * (s32)vec[2];
ss = sq0 + sq1;
*(s16 *)(param_1 + 0xDE) = func_80047D3C(ss);
*(s16 *)(param_1 + 0xDC) = func_801807D8(vec);
}
}
void func_801834B8(u16 *param_1) {
extern void func_80182A00();
+8 -247
View File
@@ -3340,23 +3340,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3368,26 +3352,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3403,58 +3368,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3582,26 +3496,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3610,64 +3505,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3711,95 +3553,14 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+8 -247
View File
@@ -3340,23 +3340,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3368,26 +3352,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3403,58 +3368,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3582,26 +3496,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3610,64 +3505,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3711,95 +3553,14 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+8 -247
View File
@@ -3342,23 +3342,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3370,26 +3354,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3405,58 +3370,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3584,26 +3498,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3612,64 +3507,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3713,94 +3555,13 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+8 -247
View File
@@ -3342,23 +3342,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3370,26 +3354,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3405,58 +3370,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3584,26 +3498,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3612,64 +3507,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3713,94 +3555,13 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+8 -247
View File
@@ -3345,23 +3345,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3373,26 +3357,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3408,58 +3373,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3587,26 +3501,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3615,64 +3510,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3716,95 +3558,14 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+8 -247
View File
@@ -3342,23 +3342,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3370,26 +3354,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3405,58 +3370,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3584,26 +3498,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3612,64 +3507,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3713,94 +3555,13 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+8 -247
View File
@@ -3342,23 +3342,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3370,26 +3354,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3405,58 +3370,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3584,26 +3498,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3612,64 +3507,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3713,94 +3555,13 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+8 -247
View File
@@ -3340,23 +3340,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3368,26 +3352,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3403,58 +3368,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3582,26 +3496,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3610,64 +3505,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3711,95 +3553,14 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
extern void func_8017CAF8(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+8 -247
View File
@@ -3343,23 +3343,7 @@ DEFINE_func_8017BF34() /* dedup: shared engine-core @0x8017BF34 (src/shared) */
// @class: plumbing
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
extern void func_8017C218(int);
void func_8017BF84(int param_1)
{
int iVar1;
iVar1 = *(int *)(param_1 + 0x1c);
*(int *)(param_1 + 0x1c) = iVar1 + 1;
if (iVar1 < 0xc) {
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0;
} else {
*(int *)(param_1 + 0x1c) = 0;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
func_8017C218(param_1);
return;
}
DEFINE_func_8017BF84() /* dedup: shared engine-core @0x8017BF84 (src/shared) */
@@ -3371,26 +3355,7 @@ void func_8017BF84(int param_1)
* 0x30 s32 suppress flag
*/
extern void func_80147324(s32 arg0);
extern void func_8017C218(int);
void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
{
s32 t;
t = param_1->f1c;
param_1->f1c = t + 1;
if (t < 0x20) {
param_1->f2a = param_1->f2a - 0x10;
} else {
if (param_1->f30 == 0) {
func_80147324(param_1->f2c);
}
param_1->f1c = 0;
param_1->f02 = param_1->f02 + 1;
}
((void (*)(Ent_8017BFE0_8017BFE0 *))func_8017C218)(param_1);
}
DEFINE_func_8017BFE0() /* dedup: shared engine-core @0x8017BFE0 (src/shared) */
@@ -3406,58 +3371,7 @@ void func_8017BFE0(Ent_8017BFE0_8017BFE0 *param_1)
* `do { func_80146A6C(0x1B, obj, ...); } while (++i < 3);` s16 loop.
*/
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8014708C(void *arg0);
extern s32 func_801472C8(struct S *a0);
extern void func_8017C218(int);
void func_8017C064(void *a0)
{
void *obj;
s32 t;
s32 r;
s16 i;
u16 v;
u16 w;
u16 d;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
v = *(u16 *)((s32)obj + 0x64) - 0x80;
w = *(u16 *)((s32)obj + 0x62) + 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
} else {
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x2C) |= 0x10;
r = *(s32 *)((s32)obj + 0x20);
d = *(u16 *)(r + 0x1C) - 0x80;
*(s16 *)(r + 0x1C) = d;
*(s16 *)(r + 0x18) = d;
r = *(s32 *)((s32)obj + 0x20);
*(u16 *)(r + 0x1A) += 0x100;
}
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0);
i++;
} while (i < 3);
} else {
if (*(s32 *)((s32)a0 + 0x30) == 0) {
func_8014708C(obj);
func_801472C8((struct S *)obj);
} else {
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000;
}
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C064() /* dedup: shared engine-core @0x8017C064 (src/shared) */
DEFINE_func_8017C1CC() /* dedup: shared engine-core @0x8017C1CC (src/shared) */
@@ -3585,26 +3499,7 @@ DEFINE_func_8017C560() /* dedup: shared engine-core @0x8017C560 (src/shared) */
* `lw $s1, 0x34($s2)` / `lhu $v0, 0x12($s2)` — same record, same widths.
*/
extern void func_8017C218(int);
void func_8017C5A0(void *a0) {
s32 t;
s32 p;
t = *(s32 *)((s32)a0 + 0x1C);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
p = *(s32 *)((s32)a0 + 0x34);
if (t < 0xC) {
*(u16 *)((s32)a0 + 0x12) += 0xE0;
} else {
*(s16 *)(p + 0x64) = 0;
*(s16 *)(p + 0x60) = 0;
*(s16 *)(p + 0x62) = 0x3000;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) += 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C5A0() /* dedup: shared engine-core @0x8017C5A0 (src/shared) */
@@ -3613,64 +3508,11 @@ void func_8017C5A0(void *a0) {
* counter unconditionally (gcc puts that store in the beqz delay slot),
* then either slide @0x2A down by 0x10 or run the 3-call teardown. */
extern void func_80147324(s32 arg0);
extern void func_80147084(s32 *a0);
extern void func_801472B4(void *a0);
extern void func_8017C218(int);
void func_8017C610(void *a0)
{
s32 t;
s32 *sub;
t = *(s32 *)((s32)a0 + 0x1C);
sub = *(s32 **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10;
} else {
func_80147324(*(u16 *)((s32)a0 + 0x2C));
func_80147084(sub);
func_801472B4(sub);
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C610() /* dedup: shared engine-core @0x8017C610 (src/shared) */
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_8017C218(int);
void func_8017C69C(void *a0)
{
void *obj;
s32 t;
s16 i;
u16 v;
u16 w;
t = *(s32 *)((s32)a0 + 0x1C);
obj = *(void **)((s32)a0 + 0x34);
*(s32 *)((s32)a0 + 0x1C) = t + 1;
if (t < 0x20) {
v = *(u16 *)((s32)obj + 0x64) + 0x80;
w = *(u16 *)((s32)obj + 0x62) - 0x100;
*(s16 *)((s32)obj + 0x64) = v;
*(s16 *)((s32)obj + 0x60) = v;
*(s16 *)((s32)obj + 0x62) = w;
i = 0;
do {
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0);
i++;
} while (i < 3);
} else {
*(s32 *)((s32)a0 + 0x1C) = 0;
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
}
((void (*)(void *))func_8017C218)(a0);
}
DEFINE_func_8017C69C() /* dedup: shared engine-core @0x8017C69C (src/shared) */
DEFINE_func_8017C770() /* dedup: shared engine-core @0x8017C770 (src/shared) */
@@ -3714,95 +3556,14 @@ void func_8017C7C4(void *a0) {
* the front of the block and swaps the two `lhu`s instead. Boost the loads, starve
* the arithmetic. */
extern int rand(void);
void func_8017C800(void *a0)
{
s32 p;
s32 obj;
short r;
u16 t;
u16 t2;
u16 e;
u16 c;
u16 d;
p = (s32)a0;
obj = *(s32 *)(p + 0x34);
r = rand();
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20);
if (*(s32 *)(p + 0x2C) != 0) {
t = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = 0x20;
*(u16 *)(p + 0x0A) = t - 0x140;
} else {
t2 = *(u16 *)(obj + 0x0A);
*(s16 *)(p + 0x16) = -0x20;
*(u16 *)(p + 0x0A) = t2;
}
e = *(u16 *)(obj + 0x0E);
c = *(u16 *)(p + 0x02);
*(s32 *)(p + 0x30) = (r >> 12) & 3;
d = ((r >> 6) & 0x3F) - 0x20;
*(u16 *)(p + 0x0E) = e + d;
d = c + 1;
*(u16 *)(p + 0x02) = d;
}
DEFINE_func_8017C800() /* dedup: shared engine-core @0x8017C800 (src/shared) */
DEFINE_func_8017C8B4() /* dedup: shared engine-core @0x8017C8B4 (src/shared) */
void func_8017C910(void *a0)
{
extern Mtx8_8017C910_8017C910 aD800AE620 __asm__("D_800AE620");
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C");
Prim_8017C910_8017C910 prim;
Mtx8_8017C910_8017C910 mtx;
s32 p;
p = (s32)a0;
if (*(s32 *)(p + 0x2C) != 0) {
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20;
} else {
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20;
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20;
}
prim.v[0].x = *(u16 *)(p + 0x6);
prim.v[0].z = *(u16 *)(p + 0xE);
prim.v[1].x = *(u16 *)(p + 0x6);
prim.v[1].z = *(u16 *)(p + 0xE);
prim.col[0].b = 0;
prim.col[0].g = 0;
prim.col[0].r = 0;
switch (*(u32 *)(p + 0x30)) {
case 0:
prim.col[1].r = 0xFF;
prim.col[1].b = 0;
prim.col[1].g = 0;
break;
case 1:
prim.col[1].g = 0xFF;
prim.col[1].b = 0;
prim.col[1].r = 0;
break;
case 2:
prim.col[1].b = 0xFF;
prim.col[1].g = 0;
prim.col[1].r = 0;
break;
case 3:
prim.col[1].b = 0xFF;
prim.col[1].g = 0xFF;
prim.col[1].r = 0xFF;
break;
}
mtx = aD800AE620;
prim.tag = 0x50000000;
aFunc80016A5C(&prim, &mtx);
}
DEFINE_func_8017C910() /* dedup: shared engine-core @0x8017C910 (src/shared) */
+496
View File
@@ -83644,6 +83644,254 @@
} \
}
#define DEFINE_func_8017BF84() \
extern void func_8017C218(int); \
void func_8017BF84(int param_1) \
{ \
int iVar1; \
iVar1 = *(int *)(param_1 + 0x1c); \
*(int *)(param_1 + 0x1c) = iVar1 + 1; \
if (iVar1 < 0xc) { \
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; \
} else { \
*(int *)(param_1 + 0x1c) = 0; \
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; \
} \
func_8017C218(param_1); \
return; \
}
#define DEFINE_func_8017C5A0() \
extern void func_8017C218(int); \
void func_8017C5A0(void *a0) { \
s32 t; \
s32 p; \
t = *(s32 *)((s32)a0 + 0x1C); \
*(s32 *)((s32)a0 + 0x1C) = t + 1; \
p = *(s32 *)((s32)a0 + 0x34); \
if (t < 0xC) { \
*(u16 *)((s32)a0 + 0x12) += 0xE0; \
} else { \
*(s16 *)(p + 0x64) = 0; \
*(s16 *)(p + 0x60) = 0; \
*(s16 *)(p + 0x62) = 0x3000; \
*(s32 *)((s32)a0 + 0x1C) = 0; \
*(u16 *)((s32)a0 + 0x2) += 1; \
} \
((void (*)(void *))func_8017C218)(a0); \
}
#define DEFINE_func_8017BFE0() \
extern void func_80147324(s32 arg0); \
extern void func_8017C218(int); \
void func_8017BFE0(Ent_8017BFE0 *param_1) \
{ \
s32 t; \
t = param_1->f1c; \
param_1->f1c = t + 1; \
if (t < 0x20) { \
param_1->f2a = param_1->f2a - 0x10; \
} else { \
if (param_1->f30 == 0) { \
func_80147324(param_1->f2c); \
} \
param_1->f1c = 0; \
param_1->f02 = param_1->f02 + 1; \
} \
((void (*)(Ent_8017BFE0 *))func_8017C218)(param_1); \
}
#define DEFINE_func_8017C610() \
extern void func_80147324(s32 arg0); \
extern void func_80147084(s32 *a0); \
extern void func_801472B4(void *a0); \
extern void func_8017C218(int); \
void func_8017C610(void *a0) \
{ \
s32 t; \
s32 *sub; \
t = *(s32 *)((s32)a0 + 0x1C); \
sub = *(s32 **)((s32)a0 + 0x34); \
*(s32 *)((s32)a0 + 0x1C) = t + 1; \
if (t < 0x20) { \
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; \
} else { \
func_80147324(*(u16 *)((s32)a0 + 0x2C)); \
func_80147084(sub); \
func_801472B4(sub); \
*(s32 *)((s32)a0 + 0x1C) = 0; \
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; \
} \
((void (*)(void *))func_8017C218)(a0); \
}
#define DEFINE_func_8017C800() \
extern int rand(void); \
void func_8017C800(void *a0) \
{ \
s32 p; \
s32 obj; \
short r; \
u16 t; \
u16 t2; \
u16 e; \
u16 c; \
u16 d; \
p = (s32)a0; \
obj = *(s32 *)(p + 0x34); \
r = rand(); \
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); \
if (*(s32 *)(p + 0x2C) != 0) { \
t = *(u16 *)(obj + 0x0A); \
*(s16 *)(p + 0x16) = 0x20; \
*(u16 *)(p + 0x0A) = t - 0x140; \
} else { \
t2 = *(u16 *)(obj + 0x0A); \
*(s16 *)(p + 0x16) = -0x20; \
*(u16 *)(p + 0x0A) = t2; \
} \
e = *(u16 *)(obj + 0x0E); \
c = *(u16 *)(p + 0x02); \
*(s32 *)(p + 0x30) = (r >> 12) & 3; \
d = ((r >> 6) & 0x3F) - 0x20; \
*(u16 *)(p + 0x0E) = e + d; \
d = c + 1; \
*(u16 *)(p + 0x02) = d; \
}
#define DEFINE_func_8017C69C() \
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \
extern void func_8017C218(int); \
void func_8017C69C(void *a0) \
{ \
void *obj; \
s32 t; \
s16 i; \
u16 v; \
u16 w; \
t = *(s32 *)((s32)a0 + 0x1C); \
obj = *(void **)((s32)a0 + 0x34); \
*(s32 *)((s32)a0 + 0x1C) = t + 1; \
if (t < 0x20) { \
v = *(u16 *)((s32)obj + 0x64) + 0x80; \
w = *(u16 *)((s32)obj + 0x62) - 0x100; \
*(s16 *)((s32)obj + 0x64) = v; \
*(s16 *)((s32)obj + 0x60) = v; \
*(s16 *)((s32)obj + 0x62) = w; \
i = 0; \
do { \
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); \
i++; \
} while (i < 3); \
} else { \
*(s32 *)((s32)a0 + 0x1C) = 0; \
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; \
} \
((void (*)(void *))func_8017C218)(a0); \
}
#define DEFINE_func_8017C064() \
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \
extern void func_8014708C(void *arg0); \
extern s32 func_801472C8(struct S *a0); \
extern void func_8017C218(int); \
void func_8017C064(void *a0) \
{ \
void *obj; \
s32 t; \
s32 r; \
s16 i; \
u16 v; \
u16 w; \
u16 d; \
t = *(s32 *)((s32)a0 + 0x1C); \
obj = *(void **)((s32)a0 + 0x34); \
*(s32 *)((s32)a0 + 0x1C) = t + 1; \
if (t < 0x20) { \
if (*(s32 *)((s32)a0 + 0x30) == 0) { \
v = *(u16 *)((s32)obj + 0x64) - 0x80; \
w = *(u16 *)((s32)obj + 0x62) + 0x100; \
*(s16 *)((s32)obj + 0x64) = v; \
*(s16 *)((s32)obj + 0x60) = v; \
*(s16 *)((s32)obj + 0x62) = w; \
} else { \
r = *(s32 *)((s32)obj + 0x20); \
*(u16 *)(r + 0x2C) |= 0x10; \
r = *(s32 *)((s32)obj + 0x20); \
d = *(u16 *)(r + 0x1C) - 0x80; \
*(s16 *)(r + 0x1C) = d; \
*(s16 *)(r + 0x18) = d; \
r = *(s32 *)((s32)obj + 0x20); \
*(u16 *)(r + 0x1A) += 0x100; \
} \
i = 0; \
do { \
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); \
i++; \
} while (i < 3); \
} else { \
if (*(s32 *)((s32)a0 + 0x30) == 0) { \
func_8014708C(obj); \
func_801472C8((struct S *)obj); \
} else { \
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; \
} \
*(s32 *)((s32)a0 + 0x1C) = 0; \
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; \
} \
((void (*)(void *))func_8017C218)(a0); \
}
#define DEFINE_func_8017C910() \
void func_8017C910(void *a0) \
{ \
extern Mtx8_8017C910 aD800AE620 __asm__("D_800AE620"); \
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); \
Prim_8017C910 prim; \
Mtx8_8017C910 mtx; \
s32 p; \
p = (s32)a0; \
if (*(s32 *)(p + 0x2C) != 0) { \
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; \
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; \
} else { \
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; \
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; \
} \
prim.v[0].x = *(u16 *)(p + 0x6); \
prim.v[0].z = *(u16 *)(p + 0xE); \
prim.v[1].x = *(u16 *)(p + 0x6); \
prim.v[1].z = *(u16 *)(p + 0xE); \
prim.col[0].b = 0; \
prim.col[0].g = 0; \
prim.col[0].r = 0; \
switch (*(u32 *)(p + 0x30)) { \
case 0: \
prim.col[1].r = 0xFF; \
prim.col[1].b = 0; \
prim.col[1].g = 0; \
break; \
case 1: \
prim.col[1].g = 0xFF; \
prim.col[1].b = 0; \
prim.col[1].r = 0; \
break; \
case 2: \
prim.col[1].b = 0xFF; \
prim.col[1].g = 0; \
prim.col[1].r = 0; \
break; \
case 3: \
prim.col[1].b = 0xFF; \
prim.col[1].g = 0xFF; \
prim.col[1].r = 0xFF; \
break; \
} \
mtx = aD800AE620; \
prim.tag = 0x50000000; \
aFunc80016A5C(&prim, &mtx); \
}
#endif
#define DEFINE_func_80128EA8() \
@@ -196693,4 +196941,252 @@
} \
}
#define DEFINE_func_8017BF84() \
extern void func_8017C218(int); \
void func_8017BF84(int param_1) \
{ \
int iVar1; \
iVar1 = *(int *)(param_1 + 0x1c); \
*(int *)(param_1 + 0x1c) = iVar1 + 1; \
if (iVar1 < 0xc) { \
*(unsigned short *)(param_1 + 0x12) = *(unsigned short *)(param_1 + 0x12) + 0xe0; \
} else { \
*(int *)(param_1 + 0x1c) = 0; \
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1; \
} \
func_8017C218(param_1); \
return; \
}
#define DEFINE_func_8017C5A0() \
extern void func_8017C218(int); \
void func_8017C5A0(void *a0) { \
s32 t; \
s32 p; \
t = *(s32 *)((s32)a0 + 0x1C); \
*(s32 *)((s32)a0 + 0x1C) = t + 1; \
p = *(s32 *)((s32)a0 + 0x34); \
if (t < 0xC) { \
*(u16 *)((s32)a0 + 0x12) += 0xE0; \
} else { \
*(s16 *)(p + 0x64) = 0; \
*(s16 *)(p + 0x60) = 0; \
*(s16 *)(p + 0x62) = 0x3000; \
*(s32 *)((s32)a0 + 0x1C) = 0; \
*(u16 *)((s32)a0 + 0x2) += 1; \
} \
((void (*)(void *))func_8017C218)(a0); \
}
#define DEFINE_func_8017BFE0() \
extern void func_80147324(s32 arg0); \
extern void func_8017C218(int); \
void func_8017BFE0(Ent_8017BFE0 *param_1) \
{ \
s32 t; \
t = param_1->f1c; \
param_1->f1c = t + 1; \
if (t < 0x20) { \
param_1->f2a = param_1->f2a - 0x10; \
} else { \
if (param_1->f30 == 0) { \
func_80147324(param_1->f2c); \
} \
param_1->f1c = 0; \
param_1->f02 = param_1->f02 + 1; \
} \
((void (*)(Ent_8017BFE0 *))func_8017C218)(param_1); \
}
#define DEFINE_func_8017C610() \
extern void func_80147324(s32 arg0); \
extern void func_80147084(s32 *a0); \
extern void func_801472B4(void *a0); \
extern void func_8017C218(int); \
void func_8017C610(void *a0) \
{ \
s32 t; \
s32 *sub; \
t = *(s32 *)((s32)a0 + 0x1C); \
sub = *(s32 **)((s32)a0 + 0x34); \
*(s32 *)((s32)a0 + 0x1C) = t + 1; \
if (t < 0x20) { \
*(u16 *)((s32)a0 + 0x2A) = *(u16 *)((s32)a0 + 0x2A) - 0x10; \
} else { \
func_80147324(*(u16 *)((s32)a0 + 0x2C)); \
func_80147084(sub); \
func_801472B4(sub); \
*(s32 *)((s32)a0 + 0x1C) = 0; \
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; \
} \
((void (*)(void *))func_8017C218)(a0); \
}
#define DEFINE_func_8017C800() \
extern int rand(void); \
void func_8017C800(void *a0) \
{ \
s32 p; \
s32 obj; \
short r; \
u16 t; \
u16 t2; \
u16 e; \
u16 c; \
u16 d; \
p = (s32)a0; \
obj = *(s32 *)(p + 0x34); \
r = rand(); \
*(u16 *)(p + 0x06) = *(u16 *)(obj + 0x06) + ((r & 0x3F) - 0x20); \
if (*(s32 *)(p + 0x2C) != 0) { \
t = *(u16 *)(obj + 0x0A); \
*(s16 *)(p + 0x16) = 0x20; \
*(u16 *)(p + 0x0A) = t - 0x140; \
} else { \
t2 = *(u16 *)(obj + 0x0A); \
*(s16 *)(p + 0x16) = -0x20; \
*(u16 *)(p + 0x0A) = t2; \
} \
e = *(u16 *)(obj + 0x0E); \
c = *(u16 *)(p + 0x02); \
*(s32 *)(p + 0x30) = (r >> 12) & 3; \
d = ((r >> 6) & 0x3F) - 0x20; \
*(u16 *)(p + 0x0E) = e + d; \
d = c + 1; \
*(u16 *)(p + 0x02) = d; \
}
#define DEFINE_func_8017C69C() \
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \
extern void func_8017C218(int); \
void func_8017C69C(void *a0) \
{ \
void *obj; \
s32 t; \
s16 i; \
u16 v; \
u16 w; \
t = *(s32 *)((s32)a0 + 0x1C); \
obj = *(void **)((s32)a0 + 0x34); \
*(s32 *)((s32)a0 + 0x1C) = t + 1; \
if (t < 0x20) { \
v = *(u16 *)((s32)obj + 0x64) + 0x80; \
w = *(u16 *)((s32)obj + 0x62) - 0x100; \
*(s16 *)((s32)obj + 0x64) = v; \
*(s16 *)((s32)obj + 0x60) = v; \
*(s16 *)((s32)obj + 0x62) = w; \
i = 0; \
do { \
func_80146A6C(0x1B, obj, 0, 0, 0, 1, 0); \
i++; \
} while (i < 3); \
} else { \
*(s32 *)((s32)a0 + 0x1C) = 0; \
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; \
} \
((void (*)(void *))func_8017C218)(a0); \
}
#define DEFINE_func_8017C064() \
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \
extern void func_8014708C(void *arg0); \
extern s32 func_801472C8(struct S *a0); \
extern void func_8017C218(int); \
void func_8017C064(void *a0) \
{ \
void *obj; \
s32 t; \
s32 r; \
s16 i; \
u16 v; \
u16 w; \
u16 d; \
t = *(s32 *)((s32)a0 + 0x1C); \
obj = *(void **)((s32)a0 + 0x34); \
*(s32 *)((s32)a0 + 0x1C) = t + 1; \
if (t < 0x20) { \
if (*(s32 *)((s32)a0 + 0x30) == 0) { \
v = *(u16 *)((s32)obj + 0x64) - 0x80; \
w = *(u16 *)((s32)obj + 0x62) + 0x100; \
*(s16 *)((s32)obj + 0x64) = v; \
*(s16 *)((s32)obj + 0x60) = v; \
*(s16 *)((s32)obj + 0x62) = w; \
} else { \
r = *(s32 *)((s32)obj + 0x20); \
*(u16 *)(r + 0x2C) |= 0x10; \
r = *(s32 *)((s32)obj + 0x20); \
d = *(u16 *)(r + 0x1C) - 0x80; \
*(s16 *)(r + 0x1C) = d; \
*(s16 *)(r + 0x18) = d; \
r = *(s32 *)((s32)obj + 0x20); \
*(u16 *)(r + 0x1A) += 0x100; \
} \
i = 0; \
do { \
func_80146A6C(0x1B, obj, 0, 0, 0, 0, 0); \
i++; \
} while (i < 3); \
} else { \
if (*(s32 *)((s32)a0 + 0x30) == 0) { \
func_8014708C(obj); \
func_801472C8((struct S *)obj); \
} else { \
*(s32 *)(*(s32 *)((s32)obj + 0x20) + 0x4) |= 0x80000000; \
} \
*(s32 *)((s32)a0 + 0x1C) = 0; \
*(s16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; \
} \
((void (*)(void *))func_8017C218)(a0); \
}
#define DEFINE_func_8017C910() \
void func_8017C910(void *a0) \
{ \
extern Mtx8_8017C910 aD800AE620 __asm__("D_800AE620"); \
extern void aFunc80016A5C(void *arg0, void *arg1) __asm__("func_80016A5C"); \
Prim_8017C910 prim; \
Mtx8_8017C910 mtx; \
s32 p; \
p = (s32)a0; \
if (*(s32 *)(p + 0x2C) != 0) { \
prim.v[0].y = *(u16 *)(p + 0xA) - 0x20; \
prim.v[1].y = *(u16 *)(p + 0xA) + 0x20; \
} else { \
prim.v[0].y = *(u16 *)(p + 0xA) + 0x20; \
prim.v[1].y = *(u16 *)(p + 0xA) - 0x20; \
} \
prim.v[0].x = *(u16 *)(p + 0x6); \
prim.v[0].z = *(u16 *)(p + 0xE); \
prim.v[1].x = *(u16 *)(p + 0x6); \
prim.v[1].z = *(u16 *)(p + 0xE); \
prim.col[0].b = 0; \
prim.col[0].g = 0; \
prim.col[0].r = 0; \
switch (*(u32 *)(p + 0x30)) { \
case 0: \
prim.col[1].r = 0xFF; \
prim.col[1].b = 0; \
prim.col[1].g = 0; \
break; \
case 1: \
prim.col[1].g = 0xFF; \
prim.col[1].b = 0; \
prim.col[1].r = 0; \
break; \
case 2: \
prim.col[1].b = 0xFF; \
prim.col[1].g = 0; \
prim.col[1].r = 0; \
break; \
case 3: \
prim.col[1].b = 0xFF; \
prim.col[1].g = 0xFF; \
prim.col[1].r = 0xFF; \
break; \
} \
mtx = aD800AE620; \
prim.tag = 0x50000000; \
aFunc80016A5C(&prim, &mtx); \
}
#endif