From 7a89bc4fb45ac3245f79912a77c8ae07d4cc7313 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:22:41 -0600 Subject: [PATCH] =?UTF-8?q?feat(config):=20-O0=20whale=20carve=20step=201?= =?UTF-8?q?=20=E2=80=94=20ov=5FSC02=5F037=20+=20ov=5FSC03=5F107?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same split as ov_MAIN_012: 0x80144B9C..0x801458E0 out of _jr_8013F350. 2 unmatched stubs, 0 already-matched islands, carve repoints (none), config/overlays.mk UNCHANGED. Both byte-neutral against their check.sha and both interleave_check ALIGNED (33/33 and 30/30). Derived and carved under .run/auto/gate..lock. --- config/splat.ov_SC02_037.yaml | 2 + config/splat.ov_SC03_107.yaml | 2 + src/ov_SC02_037/ov_SC02_037_jr_8013F350.c | 4032 ---------------- src/ov_SC02_037/ov_SC02_037_jr_801458E0.c | 5132 +++++++++++++++++++++ src/ov_SC02_037/ov_SC02_037_o0d.c | 1109 +++++ src/ov_SC03_107/ov_SC03_107_jr_8013F350.c | 3868 ---------------- src/ov_SC03_107/ov_SC03_107_jr_801458E0.c | 4968 ++++++++++++++++++++ src/ov_SC03_107/ov_SC03_107_o0d.c | 1107 +++++ 8 files changed, 12320 insertions(+), 7900 deletions(-) create mode 100644 src/ov_SC02_037/ov_SC02_037_jr_801458E0.c create mode 100644 src/ov_SC02_037/ov_SC02_037_o0d.c create mode 100644 src/ov_SC03_107/ov_SC03_107_jr_801458E0.c create mode 100644 src/ov_SC03_107/ov_SC03_107_o0d.c diff --git a/config/splat.ov_SC02_037.yaml b/config/splat.ov_SC02_037.yaml index 5651eee8d..26fcc404e 100644 --- a/config/splat.ov_SC02_037.yaml +++ b/config/splat.ov_SC02_037.yaml @@ -101,6 +101,8 @@ segments: - [0x13410, c, ov_SC02_037_o0c] - [0x14834, c, ov_SC02_037_jr_8013C98C] - [0x171f8, c, ov_SC02_037_jr_8013F350] + - [0x1ca44, c, ov_SC02_037_o0d] + - [0x1d788, c, ov_SC02_037_jr_801458E0] - [0x2c2f4, c, ov_SC02_037_jr_8015444C] - [0x2c8a0, c, ov_SC02_037_jr_801549F8] - [0x2d49c, c, ov_SC02_037_jr_801555F4] diff --git a/config/splat.ov_SC03_107.yaml b/config/splat.ov_SC03_107.yaml index d2fb47c7b..503b348f5 100644 --- a/config/splat.ov_SC03_107.yaml +++ b/config/splat.ov_SC03_107.yaml @@ -101,6 +101,8 @@ segments: - [0x13410, c, ov_SC03_107_o0c] - [0x14834, c, ov_SC03_107_jr_8013C98C] - [0x171f8, c, ov_SC03_107_jr_8013F350] + - [0x1ca44, c, ov_SC03_107_o0d] + - [0x1d788, c, ov_SC03_107_jr_801458E0] - [0x2c2f4, c, ov_SC03_107_jr_8015444C] - [0x2c8a0, c, ov_SC03_107_jr_801549F8] - [0x2d49c, c, ov_SC03_107_jr_801555F4] diff --git a/src/ov_SC02_037/ov_SC02_037_jr_8013F350.c b/src/ov_SC02_037/ov_SC02_037_jr_8013F350.c index 15edd6c63..2ff855ff0 100644 --- a/src/ov_SC02_037/ov_SC02_037_jr_8013F350.c +++ b/src/ov_SC02_037/ov_SC02_037_jr_8013F350.c @@ -3293,4035 +3293,3 @@ DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ DEFINE_func_80144B14() /* dedup: shared engine-core @0x80144B14 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_80144B9C); - -INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_801457A4); - -void func_801458E0(void) { -} - -DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80186144 block defeats the tail-merge of the two identical D_80186144 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145934(void) { - - extern u8 D_80186144; - extern u8 D_801860B4; - extern u8 D_80186090; - extern u8 D_8018606C; - extern u8 D_80186120; - extern u8 D_801860FC; - extern u8 D_801860D8; - extern u8 D_80186048; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_80186144; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80186144 load from being - * tail-merged with the v>=0x384 D_80186144 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_801860B4; - } else if (v >= 0x578) { - p = &D_80186090; - } else if (v >= 0x514) { - p = &D_8018606C; - } else if (v >= 0x384) { - p = &D_80186144; - } else if (v >= 0x258) { - p = &D_80186120; - } else if (v >= 0xC8) { - p = &D_801860FC; - } else if (v >= 0xA) { - p = &D_801860D8; - } else { - p = &D_80186048; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_801861D4 block defeats the tail-merge of the two identical D_801861D4 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145A2C(void) { - - extern u8 D_801861D4; - extern u8 D_801860B4; - extern u8 D_80186090; - extern u8 D_8018606C; - extern u8 D_801861B0; - extern u8 D_8018618C; - extern u8 D_80186168; - extern u8 D_80186048; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_801861D4; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_801861D4 load from being - * tail-merged with the v>=0x384 D_801861D4 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_801860B4; - } else if (v >= 0x578) { - p = &D_80186090; - } else if (v >= 0x514) { - p = &D_8018606C; - } else if (v >= 0x384) { - p = &D_801861D4; - } else if (v >= 0x258) { - p = &D_801861B0; - } else if (v >= 0xC8) { - p = &D_8018618C; - } else if (v >= 0xA) { - p = &D_80186168; - } else { - p = &D_80186048; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - -DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ - - -DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ - - -DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ - - - - -void func_80145CEC(void) { - extern int func_8001C320(); - extern s32 func_80029504(void); - extern int func_801552F4(); - extern int func_80147084(); - extern int func_80147098(); - extern int func_801470AC(); - extern int func_80149210(); - extern int func_8014BE9C(); - extern int func_8016533C(); - extern int func_801627C0(); - extern int func_80162AF4(); - extern int func_80165C78(); - extern int func_801468C8(); - extern int func_80145EE8(); - extern int func_8014C968(); - extern int func_8014C6D0(); - extern int func_80165938(); - extern int func_80153C8C(); - extern int func_800290BC(); - extern s32 D_800AFAE8; - extern s32 D_800DE2A4; - extern s32 D_801152C8; - extern s32 D_801855BC; - extern s32 * D_80126B78[1]; - extern s32 * D_800AF7C8; - extern s32 * D_80126B90; - extern s16 D_80126BB8; - extern s16 D_80126BBA; - extern s16 D_80126BBC; - extern s16 D_80126BC0; - extern s16 D_80126BC2; - extern s16 D_80126BC4; - extern s16 D_80126BC8; - extern s16 D_80126BCA; - extern s16 D_80126BCC; - extern s16 D_80126D10; - extern s16 D_80126D12; - extern s16 D_80126C4E; - extern s16 currentLocationId; - extern s32 D_8011F9C4; - extern s32 D_8012707C; - extern s32 D_8011DB10; - extern s32 D_80126B58; - - unsigned int uVar1; - s32 pad[2]; - (void)&pad; - - func_80016714(&D_80126B58, 0x254); - D_80126B78[0] = (s32 *)&D_800AFAE8; - D_800AF7C8 = (s32 *)&D_801152C8; - func_8001C320(&D_800AFAE8, &D_800DE2A4); - *(s32 *)((s32)D_80126B78[0] + 0x28) = 0x7fff7fff; - D_80126B90 = (s32 *)&D_801855BC; - *(u16 *)((s32)D_80126B78[0] + 0x18) = 0x1000; - D_80126BC8 = 0x1000; - D_80126BC0 = 0x1000; - D_80126BB8 = 0x1000; - *(u16 *)((s32)D_80126B78[0] + 0x1a) = 0x1000; - D_80126BCA = 0x1000; - D_80126BC2 = 0x1000; - D_80126BBA = 0x1000; - *(u16 *)((s32)D_80126B78[0] + 0x1c) = 0x1000; - D_80126BCC = 0x1000; - D_80126BC4 = 0x1000; - D_80126BBC = 0x1000; - D_80126D12 = 0x1000; - D_80126D10 = 0x1000; - D_80126C4E = 0x1000; - func_801552F4(&D_80126B58); - func_80147084(&D_80126B58); - func_80147098(&D_80126B58); - func_801470AC(&D_80126B58); - *(u16 *)((s32)D_80126B78[0] + 0x2c) = *(u16 *)((s32)D_80126B78[0] + 0x2c) | 0x50; - func_80149210(&D_80126B58, 8); - func_8014BE9C(); - func_8016533C(); - func_801627C0(); - func_80162AF4(); - func_80165C78(); - func_801468C8(&D_80126B58, 1); - if (currentLocationId != 0x30a2 && currentLocationId != 0x30a5) { - func_80145EE8(0); - } - func_8014C968(); - func_8014C6D0(); - D_8011F9C4 = 0; - func_80165938(); - func_80153C8C(); - D_8012707C = 0; - D_8011DB10 = 0; - uVar1 = ((int (*)())func_80029504)(); - if (uVar1 >= 10) { - func_800290BC(); - } -} - - - - -// @class: schedule -// @stuck: branch layout — 3-way dispatch on param_1; trying switch form - -extern s32 func_80029178(s32 arg); -extern void func_80146014(s32 a0); - - -void func_80145EE8(s32 param_1) -{ - - extern unsigned char D_801855CC[]; - extern unsigned char D_801855FC[]; - extern unsigned char D_8018564C[]; - extern unsigned char D_8018567C[]; - extern unsigned char D_801856AC[]; - switch (param_1) { - case 0: - if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { - ((void (*)(void *))func_80146014)(D_801855CC); - } - if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { - ((void (*)(void *))func_80146014)(D_801855FC); - } - if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { - ((void (*)(void *))func_80146014)(D_8018564C); - } - if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { - ((void (*)(void *))func_80146014)(D_8018567C); - } - if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { - return; - } - ((void (*)(void *))func_80146014)(D_801856AC); - break; - case 1: - ((void (*)(void *))func_80146014)(D_801855CC); - ((void (*)(void *))func_80146014)(D_801855FC); - ((void (*)(void *))func_80146014)(D_8018564C); - ((void (*)(void *))func_80146014)(D_8018567C); - ((void (*)(void *))func_80146014)(D_801856AC); - break; - } -} - - -DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ - - -void func_80146074(void) { -} - - -extern s32 func_80146128(void); -extern void func_80146360(void); -extern void func_801463A0(); - -void func_8014607C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146128\n" - "lui $at, %%hi(D_801C8538)\n" - "sw $v0, %%lo(D_801C8538)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8538)\n" - "lw $v0, %%lo(D_801C8538)($v0)\n" - "nop\n" - "beqz $v0, .L80146114\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146360\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_801463A0\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - ".L80146114:\n" - "nop\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -extern void *memcpy(void *dst, const void *src, u32 n); -extern void func_80146FC4(s32 a0); -extern void func_80150A70(s32 a0); -extern void func_80147098(s32 *a0); -extern void func_8014A638(s32 arg0); -extern s32 func_80155458(s32 a0); -extern s32 func_80029104(void); -extern void func_80029344(void); -extern void func_8014ADE0(s32 a0); -extern void func_8014B350(s32 a0); -extern void func_8014B7A4(s16 *param_1); -extern s32 func_80161D58(s32 a0); -extern void func_80161A90(s32 a0); -extern void func_8014B504(u16 *a0); -extern void func_80149BEC(s32 a0); -extern void func_8014B5D0(s32 *a0); -extern void func_8014C99C(u8 *a0); -extern void func_8014B190(s32 s0); -extern void func_80148648(s32 a0, s32 a1); -extern s32 func_80149228(s32 a0); -extern void func_8014A59C(s32 a0); -extern void func_8016F14C(void *a0); -extern void func_80154418(void *a0); -extern void func_80154BE4(s32 a0); -extern void func_80165694(s32 arg0); -extern void func_801654A8(s32 a0); -extern void func_8014A680(s32 a0); -extern void func_8014A6A8(s32 a0); -extern void func_8014A71C(s32 a0); -extern void func_80172588(s32 *a0); -extern void func_801473DC(s32 *a0); -extern void func_80015978(s32 a0, s32 *a1); -s32 func_80146128(void) -{ - - extern s32 D_80126B58; - extern s32 *D_80126B78; - extern u8 D_80078EC1; - extern s32 D_80078EC8; - extern s32 D_80126B9C; - extern s32 D_8011F730; - extern u16 D_801152B8; - extern u16 D_8012693A; - extern u8 D_80126BE0[]; - extern u8 D_801150F0[]; - register s32 base __asm__("$16"); - register s32 *p __asm__("$17"); - p = D_80126B78; - base = (s32)&D_80126B58; - func_80146FC4(base); - memcpy((void *)D_801150F0, (void *)D_80126BE0, 8); - func_80150A70(base); - ((void (*)(s32))func_80147098)(base); - func_8014A638(base); - D_8011F730 = 0; - D_801152B8 = 0; - D_8012693A = 0; - if (D_80078EC1 == 0x10 && D_80078EC8 != 0) { - *(u16 *)((s32)p + 2) = 6; - D_80126B9C |= 0x800; - } else { - *(u16 *)((s32)p + 2) = 1; - *(s32 *)(base + 0x44) &= ~0x800; - } - if (*(s32 *)(base + 0x1B0) != 0) { - *(s32 *)(base + 0x1B0) = *(s32 *)(base + 0x1B0) - 1; - } - if (func_80155458(base) == 0 && (*(s32 *)(base + 0x44) & 0x4000000) == 0) { - if ((func_80029104() & 0xFF) != 0) { - func_8014ADE0(base); - func_8014B350(base); - ((void (*)(s32))func_8014B7A4)(base); - ((void (*)(s32))func_80161D58)(base); - } - func_80029344(); - func_80161A90(base); - ((void (*)(s32))func_8014B504)(base); - func_80149BEC(base); - ((void (*)(s32))func_8014B5D0)(base); - ((void (*)(s32))func_8014C99C)(base); - func_8014B190(base); - func_80148648(base, 0); - ((void (*)(s32))func_80149228)(base); - func_8014A59C(base); - ((void (*)(s32))func_8016F14C)(base); - ((void (*)(s32))func_80154418)(base); - func_80154BE4(base); - func_80165694(base); - func_801654A8(base); - func_8014A680(base); - func_8014A6A8(base); - func_8014A71C(base); - ((void (*)(s32))func_80172588)(base); - ((void (*)(s32))func_801473DC)(base); - ((void (*)(s32, s32))func_80015978)(base + 4, base + 0x98); - return 1; - } - ((void (*)(s32, s32))func_80015978)(base + 4, base + 0x98); - return 0; -} - - - -// @class: struct -// @stuck: none — MATCH (fnptr-table idiom: D_801856FC[u8 idx](&arg)) - -void func_80146360(void) -{ - - extern void (*D_801856FC[])(void *); - extern u8 D_80126BA4; - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern s32 D_80126B58; - D_801856FC[D_80126BA4](&D_80126B58); -} - - - - - - - /* size 8, align 1 -> unaligned block move */ - -DEFINE_func_801463A0() /* dedup: shared engine-core @0x801463A0 (src/shared) */ - - -DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ - - -DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ - - -DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ - - -DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ - - -DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ - - -DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ - - -DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ - - -DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ - - -DEFINE_func_801466F0() /* dedup: shared engine-core @0x801466f0 (src/shared) */ - - -DEFINE_func_80146750() /* dedup: shared engine-core @0x80146750 (src/shared) */ - - -DEFINE_func_8014680C() /* dedup: shared engine-core @0x8014680c (src/shared) */ - - -DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ - - -DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ - - -DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ - - -DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ - - - -extern void func_80146AFC(void*); -void aF80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6) __asm__("func_80146A6C"); -void aF80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6) -{ - u8 sp[0x18]; - *(s16 *)(sp + 0x0) = a0; - *(s32 *)(sp + 0x8) = a1; - *(s16 *)(sp + 0x2) = a2; - *(s16 *)(sp + 0x4) = a3; - *(s16 *)(sp + 0x6) = a4; - *(s32 *)(sp + 0xC) = a5; - *(s32 *)(sp + 0x10) = a6; - ((s32 (*)(void *))func_80146AFC)(sp); -} - - -DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ - - -extern s32 func_80146B9C(void * arg0); - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_80146AFC; - -/* func_80146AFC — ASCENDING twin of the byte-proven DEFINE_func_80146B9C() - * in src/shared/engine_core.h (cookbook §71: find the already-matched sibling first). - * Same 0x58-stride slot table (base D_8011D030), same 7-store copy body in the same - * order, same $a2/$a1 giv pair. 80146B9C walks DOWN; this one walks UP, so the guard - * is `p < end`, end = p + 0xA50 (30 slots x 0x58). - * - * DECAY ROOT CAUSE (this redraft): the stored backlog draft had been rewritten to - * `void func_80146AFC(...)`, which drops BOTH `return 0` paths' `addu $v0,$zero,$zero` - * and the hit path's `j .L80146B94` => LENGTH-DRIFT -2 (38 vs 40) plus $v0/$v1 regalloc - * drift on the final lw/sw pair. Restoring the s32 return type (the fleet spelling the - * banked sibling func_80146B9C already uses) restores MATCH at 40/40. - * - * RECONCILE (2026-08-01) — the whole-binary gate failed with - * ov_SC01_077_after.c:592: conflicting types for `D_8011D030' (previous decl :564) - * TWO file-scope collisions were present; both are fixed HERE, with NO edit to - * src/shared/engine_core.h and NO change to the generated code (re-verified MATCH - * after each step): - * - * 1. D_8011D030 (the reported one). DEFINE_func_801469C8() emits - * `extern s32 D_8011D030;` at FILE scope (engine_core.h:10811, above the - * `s32 func_801469C8(...) {` line), and this TU expands that macro at :564 — - - extern s32 D_8011D030; - * i.e. before the splice point :570. The draft's `extern u16` therefore - * redeclared it incompatibly at :592. Conformed to the TU's `extern s32`. - * Codegen-neutral: the sole use is `(u8 *)&D_8011D030`, an address-of, so the - * declared object type never reaches a load/store width (cookbook §20). - * - * 2. func_80146AFC ITSELF (latent, would have surfaced next). DEFINE_func_8014C010() - * (:13510) and DEFINE_func_8014AD30() (:13524) each emit a file-scope - * `extern void func_80146AFC(void *a0);`, and this TU expands them at :1386 and - * :1541 — after the splice — so an `s32 func_80146AFC` definition collides on the - * RETURN axis. Fixed with the §37/§124 ASM-LABEL ALIAS: the C identifier is - * aF80146AFC, the emitted label is func_80146AFC, so the canonical void decl and - * this s32 definition never share a namespace. Callers discard the result, so the - * void-typed call sites stay codegen-identical. - * - * Both were reproduced and then cleared against the real cpp+cc1-2.7.2 pair using a - * synthetic copy of this TU's declaration environment (.run/uc2/_recon_probe_80146AFC.c): - * the pre-reconcile spelling emits exactly the gate's error pair; the spelling below - * compiles clean. - * - * ORACLE: tools/match_one.py func_80146AFC --c .run/uc2/func_80146AFC.c - * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_after -> MATCH (40 ins) - */ - - -s32 aF80146AFC(void *arg0) __asm__("func_80146AFC"); - -s32 aF80146AFC(void *arg0) -{ - register u8 *p __asm__("$6"); - register u8 *q __asm__("$5"); - u8 *end; - p = (u8 *)&D_8011D030; - end = p + 0xA50; - if ((u32)p < (u32)end) { - q = p + 0x30; - do { - if (*(u16 *)p == 0) { - *(s32 *)(q + 0x4) = *(s32 *)((u8 *)arg0 + 0x8); - *(s16 *)p = *(u16 *)((u8 *)arg0 + 0x0); - *(s16 *)(q - 0x2A) = *(u16 *)((u8 *)arg0 + 0x2); - *(s16 *)(q - 0x26) = *(u16 *)((u8 *)arg0 + 0x4); - *(s16 *)(q - 0x22) = *(u16 *)((u8 *)arg0 + 0x6); - *(s32 *)(q - 0x4) = *(s32 *)((u8 *)arg0 + 0xC); - *(s32 *)(q + 0x0) = *(s32 *)((u8 *)arg0 + 0x10); - return (s32)p; - } - p += 0x58; - q += 0x58; - } while ((u32)p < (u32)end); - } - return 0; -} - - -DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ - - -DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ - - -DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ - - -DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ - - -DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ - - -DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ - - -DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ - - -DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ - - -DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ - - -DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ - - -DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ - - -DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ - - -DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ - - -DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ - - -DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ - - -extern s16 func_8012A68C(void); -extern s16 func_8012A758(void); -extern void func_8004978C(s16 *a0, void *a1); -extern void ApplyMatrixSV(void*, Svec_801372B0*, Svec_801372B0*); -void func_80146F58(s32 a0, s32 a1) { - s16 vec[3]; - u8 mat[0x20]; - vec[0] = func_8012A68C(); - vec[1] = func_8012A758(); - vec[2] = 0; - func_8004978C(vec, mat); - ((void (*)(void *, void *, void *))ApplyMatrixSV)(mat, (void *)a0, (void *)a1); -} - - -extern void func_80015954(s32 a0, s32 a1); -extern void *memcpy(void *dst, const void *src, u32 n); -void func_80146FC4(s32 a0) { - - extern u8 D_80126DB0[]; - extern u16 D_80126DB6; - s32 s1 = a0; - s32 s0; - if (*(s16 *)(s1 + 0xA) >= 0x401) { - s0 = (s32)D_80126DB0; - func_80015954(s0, s1 + 0x4); - memcpy((void *)(s1 + 0x88), (void *)s0, 8); - *(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = D_80126DB6; - } -} - - -DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ - - -DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ - - -DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ - - -DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ - - -DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ - - -DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ - - -DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ - - -DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ - - -DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ - - -DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ - - -DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ - - -DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ - - -DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ - - -DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ - - -DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ - - -DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ - - -DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ - - -DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ - - -DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ - - -DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ - - -DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ - - -DEFINE_func_80147364() /* dedup: shared engine-core @0x80147364 (src/shared) */ - - -DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ - - -DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ - - -DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ - - -DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ - - -DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ - - -DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ - - -DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ - - -DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ - - -DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ - - -DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ - - -DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ - - -DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ - - -DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ - - -DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ - - -DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ - - -DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ - - -DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ - - -DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ - - -DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ - - -DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ - - -DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ - - -DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ - - -DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ - - -DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ - - -DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ - - -DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ - - -DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ - - -DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ - - -DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ - - -DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ - - -DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ - - -DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ - - -DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ - - -DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ - - -DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ - - -DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ - - -DEFINE_func_801483E8() /* dedup: shared engine-core @0x801483e8 (src/shared) */ - - -DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ - - -DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ - - -DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ - - -DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ - - -DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ - - -DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ - - -DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ - - -DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ - - -DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ - - -DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ - - -DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ - - -DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ - - -DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ - - -DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ - - -DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ - - -DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ - - -DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ - - -DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg - -extern s32 ratan2(s32 a0, s32 a1); - -int func_80148AFC(void *a0) { - - extern s32 D_801151D4; - extern ActorFn D_80185704[]; - s32 p = (s32)a0; - s32 iVar5 = *(s32 *)(p + 0x20); - register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), - *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; - s32 sVar3; - u8 bVar1; - __asm__("" : "=r"(tmp) : "0"(tmp)); - sVar3 = tmp; - bVar1 = *(u8 *)(p + 0xA9); - - switch (bVar1) { - case 0x41: - return D_80185704[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; - case 0x53: - case 0x73: - { - register u32 bb __asm__("$3"); - register s32 c80 __asm__("$2") = 0x80; - register s32 lo __asm__("$4"); - register s32 hi __asm__("$2"); - bb = *(u16 *)(p + 0xAE); - lo = bb & 0xFF; - if (lo != c80 || (hi = bb >> 8) != 0x80) { - s32 sVar4; - __asm__ __volatile__("" : : : "memory"); - sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); - *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; - return 1; - } - return 0; - } - } -} - - -DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ - - -DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ - - -DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ - - -DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ - - -DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ - - -DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ - - -DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ - - -DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ - - -DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ - - -DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ - - -DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ - - -DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ - - -DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ - - -DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ - - -DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ - - -DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (68 ins) -extern s32 ratan2(s32 a0, s32 a1); - -s32 func_80148D44(void) { - - extern s32 D_801151D4; - extern u8 D_80126C01; - extern u16 D_80126C02; - extern u16 D_80126C06; - extern s32 D_80185744[]; - register s32 ang __asm__("$16"); - register s32 a __asm__("$4"); - s32 p; - s32 res; - s32 d; - - p = D_801151D4; - a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), - *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; - d = (s32)D_80126C01; - __asm__ __volatile__("" : : "r"(a)); - ang = a; - if (d == 0x53) { - goto final; - } - if (d < 0x54) { - if (d == 0x41) { - goto call; - } - return 0x41; - } - if (d != 0x73) { - return 0x73; - } - goto final; -call: - return (s32)(s16)((s16 (*)())(D_80185744[D_80126C02 >> 0xc]))(); -final: - { - u32 e = D_80126C06; - if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { - return -1; - } - __asm__ __volatile__("" : : : "memory"); - res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; - } - return res; -} - - - -extern s32 ratan2(s32, s32); -/* derived from asm: lui/addu/lw %lo(D_80185784) indexed by (u16>>12)*4, then jalr with no args; - * the result is sign-extended from 16 bits => the table's functions return s16. */ - -s32 func_80148E54(s32 arg0) { - - extern s32 D_801151D4; - extern s16 (*D_80185784[])(); - register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), - *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; - s32 ang; - __asm__("" : "=r"(tmp) : "0"(tmp)); - ang = tmp; - - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - return D_80185784[*(u16 *)(arg0 + 0xAA) >> 12](); - case 0x53: - case 0x73: - if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { - return -1; - } - return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, - 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; - } -} - - -DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ - - -DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ - - -DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ - - -DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ - - -DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ - - -DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ - - -DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ - - -DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ - - -DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ - - -DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ - - -DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ - - -DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ - - -DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ - - -DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ - - -DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ - - -DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ - - -DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ - - -DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ - - -DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ - - -DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ - - -DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ - - -DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ - - -DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ - - -DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ - - -DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ - - -DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ - - -DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ - - -DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ - - -DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ - - -DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ - - -DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ - - -DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ - - -DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ - - -DEFINE_func_80149350() /* dedup: shared engine-core @0x80149350 (src/shared) */ - - -DEFINE_func_80149374() /* dedup: shared engine-core @0x80149374 (src/shared) */ - - -DEFINE_func_801493D0() /* dedup: shared engine-core @0x801493d0 (src/shared) */ - - -DEFINE_func_8014942C() /* dedup: shared engine-core @0x8014942c (src/shared) */ - - -void func_8012F038(int param_1, short *param_2, short *param_3); - -void func_80149450(int param_1, short *param_2) -{ - short tmp_out[3]; - short tmp_in[3]; - - tmp_in[0] = param_2[1]; - tmp_in[1] = param_2[3]; - tmp_in[2] = param_2[5]; - - func_8012F038(*(int *)(param_1 + 0x20) + 0x34, tmp_in, tmp_out); - - param_2[1] = tmp_out[0]; - param_2[3] = tmp_out[1]; - param_2[5] = tmp_out[2]; -} - - -extern void func_8012F038(int param_1, short *param_2, short *param_3); - -void func_801494CC(int param_1, short *param_2, short *param_3) -{ - short temp_out[3]; - short temp_in[3]; - - temp_in[0] = param_2[1]; - temp_in[1] = param_2[3]; - temp_in[2] = param_2[5]; - - func_8012F038(*(int *)(param_1 + 0x20) + 0x34, temp_in, temp_out); - - param_3[1] = temp_out[0]; - param_3[3] = temp_out[1]; - param_3[5] = temp_out[2]; -} - - -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); -extern void func_8012EF70(s32 a0, s32 a1); - -void func_80149544(s32 a0, s32 a1, s32 a2) -{ - s32 buf[2]; - - func_8012F14C(*(s32 *)(a0 + 0x20) + 0x34, a1, buf); - func_8012EF70(buf, a2); -} - - -void func_8012F14C(s32 a0, s32 a1, s32 a2); -void func_8012EFB8(s32 a0); - -void func_80149584(s32 a0, s32 a1, s32 a2) -{ - char local_10[8]; - - func_8012F14C(*(s32*)((char*)a0 + 0x20) + 0x34, a1, (s32)local_10); - ((void (*)(s32, s32))func_8012EFB8)((s32)local_10, a2); -} - - -DEFINE_func_801495C4() /* dedup: shared engine-core @0x801495C4 (src/shared) */ - - -DEFINE_func_8014964C() /* dedup: shared engine-core @0x8014964c (src/shared) */ - - -DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ - - -DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ - - -DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ - - -DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ - - -DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ - - -DEFINE_func_801497A8() /* dedup: shared engine-core @0x801497a8 (src/shared) */ - - -DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ - - -DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ - - -DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ - - -DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ - - -/* callees (JSON-canonical, verbatim) */ -extern void func_80015978(s32 a0, s32 *a1); -extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80147364(); -extern s32 func_800CCF28(s32 a0); -extern u16 *func_80146750(u16 *param_1); - -/* data (JSON-canonical, verbatim) */ -extern u8 D_80126B5C; -extern void *D_8012707C; - -/* not in the JSON data list but required by the asm (%hi/%lo currentLocationId); - type per src/shared/engine_core.h DEFINE_func_80149954() sibling macro (lh => s16) */ -extern s16 currentLocationId; - -s32 func_80149954(s32 s0) -{ - s32 sp10[2]; - s16 buf[10]; - - if (*(s32 *)(s0 + 0x44) & 0x404) { - return 0; - } - if ((*(u16 *)(s0 + 0xAA) & 0x90) == 0) { - if (currentLocationId == 0x308D) { - func_80015978((s32)&D_80126B5C, sp10); - func_8012E5CC((s32)sp10, 0x4, 0x8E0); - return 0; - } - func_8002D4C8(0x4, 0x8E0); - return 0; - } - if (*(u16 *)(s0 + 0xAC) & 0x90) { - if ((s32)D_8012707C == 0x8E0) { - D_8012707C = 0; - } else { - func_80147364(0x8E0, 0); - } - } - func_800CCF28(s0); - *(s16 *)((s32)buf + 0x0) = 0x12; - *(s32 *)((s32)buf + 0x8) = s0; - *(s16 *)((s32)buf + 0x2) = 0; - *(s16 *)((s32)buf + 0x4) = -0x1E; - *(s16 *)((s32)buf + 0x6) = 0; - *(s32 *)((s32)buf + 0xC) = 0; - *(s32 *)((s32)buf + 0x10) = 0; - func_80146750(buf); - return 1; -} - - -DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ - - -DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ - - -DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ - - -DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ - - -DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ - - -DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ - - -DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ - - -DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ - - -DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ - - -DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ - - -DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ - - -DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ - - -DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ - - -DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ - - -DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ - - -extern void func_80144A04(s32 *a0); -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); -extern void func_8016EDEC(s32, s32, s32); -s32 func_80149F2C(s32 a0, s32 a1) -{ - void *s1 = a0; - s32 *s0; - if (*(u16 *)a1 == 0x83 || *(u16 *)a1 == 0x61) { - s0 = (s32 *)((s32 (*)())func_80144A04)((s32 *)a1); - if (s0 != 0) { - func_801599A4(s1); - func_80159B3C(s1); - ((void (*)(s32, s32))func_8016EDEC)((s32)s0, 0x1000000); - return 1; - } - } - return 0; -} - - -void func_80149FA8(void) { -} - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins) -extern s16 currentLocationId; - -s32 func_80149FB0(s32 a0) { - - extern s32 D_801857C4[]; - extern u8 D_80078E78[]; - s32 *p = &D_801857C4[0]; - register s32 v __asm__("$3") = *p; - u8 *q = &D_80078E78[0]; - s32 loc; - - if (v != 0) { - loc = currentLocationId; - p = p + 1; - do { - if (loc == v) { - goto ret0; - } - v = *p; - p = p + 1; - } while (v != 0); - } - - if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { - return 0; - } - if (*(s16 *)(a0 + 0x1C8) != 0) { - return 0; - } - if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { - ret0: - return 0; - } - v = q[0x48]; - q[0x48] = v ^ 0x80; - return 1; -} - - -extern u8 func_8014BEF8(void); -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); -extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3); -extern void func_8014A1B0(s32 a0, s32 a1); -extern u8 D_801202A0[]; - -typedef struct { - /* 0x00 */ s16 a30; - /* 0x02 */ s16 a2e; - /* 0x04 */ s16 a2c; - /* 0x06 */ s16 pad06; - /* 0x08 */ s32 buf[2]; - /* 0x10 */ s16 a20; - /* 0x12 */ s16 a1e; - /* 0x14 */ s16 a1c; -} Loc_8014A048; - -s32 func_8014A048(s32 param_1) { - Loc_8014A048 L; - s32 s0; - s32 s2; - u32 s3; - - if ((*(u32 *)(param_1 + 0x44) & 0x400) != 0) { - return 0; - } - if ((*(u16 *)(param_1 + 0xAC) & 0x80) == 0) { - if ((*(u16 *)(param_1 + 0xAC) & 0x10) == 0) { - return 0; - } - if (((s32 (*)(s32))func_8014BEF8)(param_1) == 0) { - goto ret0; - } - } - L.a30 = *(s16 *)(param_1 + 6); - L.a2e = *(s16 *)(param_1 + 0xA); - L.a2c = *(s16 *)(param_1 + 0xE); - L.a1e = -0x10; - L.a20 = 0; - L.a1c = -0x20; - func_8012F14C(*(s32 *)(param_1 + 0x20) + 0x34, (s32)&L.a20, (s32)L.buf); - s3 = 0; - s2 = 0; - while (1) { - s0 = (s32)D_801202A0 + s2; - __asm__ __volatile__("" : "=r"(s0) : "0"(s0)); - if ((*(u16 *)s0 != 0) && - (*(s32 *)(s0 + 0x58) != 0) && - (*(s16 *)(s0 + 0xAA) == 0) && - (*(s32 *)(param_1 + 0x184) != s0) && - ((*(u16 *)(s0 + 0x5C) & 0x200) != 0) && - (func_80135260(*(s32 *)(s0 + 0x20), *(s32 *)(s0 + 0x58), &L.a30, (s16 *)L.buf) != 0)) { - break; - } - s3++; - s2 += 0x10C; - if (s3 >= 0x60) { - return 0; - } - } - *(s32 *)(param_1 + 0x178) = s0; - func_8014A1B0(param_1, s0); - return 1; -ret0: - return 0; -} - - -DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ - - -DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ - - -DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ - - -DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ - - -DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ - - -DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ - - -DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ - - -DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ - - -DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ - - -DEFINE_func_8014A51C() /* dedup: shared engine-core @0x8014a51c (src/shared) */ - - -DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ - - -DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ - - -DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ - - -DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ - - -DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ - - -DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ - - -DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ - - -DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ - - - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_8014A738; - - - - - - - - -DEFINE_func_8014A738() /* dedup: shared engine-core @0x8014A738 (src/shared) */ - - -DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ - - -DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ - - -DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ - - -DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ - - -DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ - - -DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ - - -DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ - - -DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ - - -DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ - - -DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ - - -DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ - - -DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ - - -DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ - - -DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ade0 (src/shared) */ - - -DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ - - -DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ - - -DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ - - -DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ - - -DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ - - -DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ - - -DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ - - -DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ - - -DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ - - -DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ - - -DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ - - -DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ - - -DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ - - -DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ - - -DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ - - -DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ - - -DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ - - -DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ - - -DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ - - -DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ - - -DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ - - -DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ - - -DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ - - -DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ - - -DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ - - -DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ - - -DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ - - -DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ - - -DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ - - -DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ - - -DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ - - -DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ - - -DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ - - -DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ - - -DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ - - -DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ - - -DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ - - -void func_8014BDE0(void) { -} - -DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ - - -DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ - - -DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ - - -DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ - - -DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ - - -DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ - - -DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ - - -DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ - - -DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ - - -DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ - - -DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ - - -DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ - - -DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ - - -DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ - - -DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ - - -DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ - - -DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ - - -DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ - - -extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); -extern u8 D_8018584C; - -void func_8014C1A0(s32 arg0, s32 arg1) { - func_8014C1C8(arg0, arg1, &D_8018584C); -} - - -DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ - - -DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ - - -DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ - - -DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ - - -DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ - - -DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ - - -DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ - - - -/* §37/§73/§124 asm-label alias: the fleet canon declares this `extern void` (engine_core.h, inside 8 - * DEFINE_func_* macros); the byte-true body must return s32. Aliasing the C name sidesteps the - * RETURN-axis conflict with no header edit. This line MUST travel with the body. */ -s32 aF8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4) __asm__("func_8014C4AC"); - -DEFINE_func_8014C4AC() /* dedup: shared engine-core @0x8014C4AC (src/shared) */ - - -DEFINE_func_8014C568() /* dedup: shared engine-core @0x8014c568 (src/shared) */ - - -DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ - - - -extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); - -s16 func_8014C5D0(s32 a0, s32 a1) { - - extern u8 D_80185854; - return func_8014C5FC(a0, a1, &D_80185854); -} - - -DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ - - -DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ - - -DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ - - -DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ - - -DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ - - - - - -// @class: schedule -// @stuck: none — MATCH (match_one 91/91) -// -// Levers used (all byte-gated on ov_SC07_006): -// 1. §struct 8-byte alignment-1 struct copy `*(M8_8014C6F4*)(a+0x164) = *(M8_8014C6F4*)(p+0x10)` -// -> the lwl/lwr,lwl/lwr,swl/swr,swl/swr block (engine_types.h M8_xxx convention). -// 2. §17 base-pointer cache: `u8 *p = D_80078E78;` (NOT a direct D_80078E78[0x49]) so gcc pins -// the base into callee-saved $s1 and hoists the la into the prologue (live across the jal). -// 3. §17 register pins: the search result `e` MUST be $v0 and the limit `lim` $v1, else -// local-alloc swaps the loop IV/limit pair ($v1<->$a0) and coalesces `e` into the IV. -// 4. DELAY-SLOT lever (new): writing the compare constant as its own pre-loop statement -// (`want = 0x22;`) instead of the literal `0x22` inside the loop test. With the literal, -// loop.c hoists the `li $a1,0x22` into the loop PREHEADER (after the duplicated entry test), -// so reorg.c's guard branch has nothing local to take and instead COPIES the branch-target -// insn (`addu $v0,$zero,$zero`) into its delay slot and redirects past it — a +1 shift that -// also lets the loop-back branch steal the same insn (nop -> move). Materialising the -// constant in the block BEFORE the entry test makes fill_simple_delay_slots take it from -// the preceding insns, reproducing `beqz $v0,.L8014C7F4 / addiu $a1,$zero,0x22` and leaving -// the loop-back delay slot a nop. `want` needs no pin — gcc lands it in $a1 on its own. - - -DEFINE_func_8014C6F4() /* dedup: shared engine-core @0x8014C6F4 (src/shared) */ - - -DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ - - -DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ - - -DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ - - -DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ - - -DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ - - -DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ - - -DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ - - -DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ - - -DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ - - -DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ - - -DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ - - -DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ - - -DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ - - -DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ - - -DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ - - -DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ - - -DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ - - -DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ - - -DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ - - -DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ - - -DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ - - -DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ - - -DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ - - -DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ - - -extern u16 D_80126CC4; - -void func_8014CBE8(void) -{ - (*(s16 *)&D_80126CC4) = 0; -} - - -DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ - - -DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ - - - -extern void func_8014CD0C(u8 *a0); - -void func_8014CCB4(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014CD0C\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ - - -DEFINE_func_8014CD80() /* dedup: shared engine-core @0x8014cd80 (src/shared) */ - - -DEFINE_func_8014CF04() /* dedup: shared engine-core @0x8014CF04 (src/shared) */ - - - -extern void func_8014D0A4(s32); - -void func_8014D04C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014D0A4\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ - - - - -DEFINE_func_8014D12C() /* dedup: shared engine-core @0x8014D12C (src/shared) */ - - - -DEFINE_func_8014D2A0() /* dedup: shared engine-core @0x8014D2A0 (src/shared) */ - - -extern int D_801C8540; -extern void func_8014D438(s32); - -void func_8014D3E0(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014D438\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ - - -DEFINE_func_8014D4C0() /* dedup: shared engine-core @0x8014d4c0 (src/shared) */ - - -extern u8 D_801202A0[]; -extern u8 D_80126720[]; - -s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); -s32 func_8014C918(s32 a0, s32 a1); - -DEFINE_func_8014D610() /* dedup: shared engine-core @0x8014D610 (src/shared) */ - - - -extern void func_8014D790(s32); - -void func_8014D738(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014D790\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ - - - typedef struct EntD820_8014D820 - { - u16 f0; - u16 f2; - u16 f4; - u16 x; - u16 f8; - u16 y; - u16 fC; - u16 z; - u8 p10[0x10]; - s32 f20; - u8 p24[0x34]; - s32 f58; - u16 f5C; - u16 f5E; - u8 p60[0x10C - 0x60]; - } Ent_8014D820; - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_8014D820; - -// @class: schedule -// @stuck: none — MATCH (304/304), symcheck SYMS-OK 12/12, and the whole-TU cc1 stage now compiles CLEAN -// -// ══════════════════════════════════════════════════════════════════════════════ -// SESSION-22 RE-DERIVATION + THE ROOT-CAUSE FIX FOR THE "ASSEMBLER-STAGE" FAILURE -// ══════════════════════════════════════════════════════════════════════════════ -// The SESSION-21 draft did reach match_one MATCH (re-verified this session, 304/304) -// and symcheck SYMS-OK — but the whole-binary build died with an opaque `Error 33` -// that was logged as "an ASSEMBLER-stage failure I did not finish diagnosing". -// -// IT IS NOT AN ASSEMBLER FAILURE. Stage-by-stage isolation of the real pipeline -// (cpp | cc1 | maspsx | as) over a scratch copy of src/ov_SC01_077/ov_SC01_077_after.c -// with this function spliced in place of its INCLUDE_ASM gives: -// cpp rc=0 -// cc1 rc=33 <-- ".../tu.c:1901: conflicting types for `Ent_8014D820'" -// "src/shared/engine_types.h:434: previous declaration of `Ent_8014D820'" -// maspsx rc=0 -// as rc=0 (only benign "used $at without .set noat" warnings) -// `33` is CC1's exit code, surfaced by the recipe's `set -o pipefail` (Makefile:560). -// Because `as` is the LAST stage in that pipe, make attributes the failure to the -// assembler — the same misread that made func_8012AAAC's "opaque Error 33" look -// assembler-shaped until it was isolated stage by stage. -// -// ROOT CAUSE: the draft declared `typedef struct Ent_8014D820 { ... } Ent_8014D820;` at FILE scope. -// `Ent_8014D820` is already a shared engine type (src/shared/engine_types.h:434, -// typedef struct { u16 guard; u16 pad; u16 field; u8 rest[14]; } Ent_8014D820; -// a 20-byte struct), pulled into every overlay TU through -// src/ov_SC01_077/../shared/engine_core.h. gcc-2.7.2 rejects the redefinition -// outright (an ERROR, not the "type mismatch with previous external decl" -// WARNING that the rest of this TU is full of), so cc1 aborts. -// -// THE FIX, and why this shape: all three helper types are now declared at BLOCK -// scope inside func_8014D820 itself. That is strictly better than renaming to -// `Ent_8014D820` at file scope, because this function is an h_seq family EXEMPLAR -// with 138 members: a file-scope type name has to stay unique against 138 distinct -// overlay TUs *and* against whatever engine_types.h grows next, while a block-scope -// typedef can never collide with anything, in any TU, ever. It also matches the -// fleet convention — src/shared/engine_core.h contains ZERO `typedef struct` -// (all 0 of them); every DEFINE_ macro body uses engine_types.h types or local ones. -// Typedefs emit no code and create no allocno, so the move is byte-neutral: -// re-verified MATCH (304 ins) after the change, and the local DECLARATION ORDER -// below is untouched (§76 — declaration order is the dominant regalloc lever here). -// -// ══════════════════════════════════════════════════════════════════════════════ -// THE BODY (SESSION-21 derivation, each lever re-verified this session) -// ══════════════════════════════════════════════════════════════════════════════ -// func_8014D820 (304 ins, ov_SC01_077, h_seq family exemplar, 138 members). -// The whole residual off the SESSION-18 close=9 seed was a sched1 PERMUTATION -// inside ONE basic block (idx 79..101, the pos/desc set-up between the `slti 0x400` -// guard and the `currentLocationId` test): identical multiset of insns, identical -// register assignment, wrong positions. §66d-5 exactly — classed WIDTH [structural] -// at every waypoint and not structural at all. -// -// The lever (reusable): that block is 12 statements over a small dependency poset -// (load x0/y0/z0 -> add -> store pos.* / desc.*), so source ORDER is the only -// control and the space of linear extensions is enumerable. A dependency-respecting -// sweep found MATCH at -// x0; pos.x; y0; pos.y; z0; tx; pos.z; tz; desc.x; desc.z; ty; desc.y -// i.e. all three loads and both pos stores first, then the two adds, then the desc -// stores, with the y accumulator (`ty`) computed LAST. No pin, no barrier, no -// permuter run. Eleven hand attempts on this window (SESSION-18) were inert or -// worse — hand-reading a 12-statement schedule permutation is the wrong tool; -// brute-forcing the linear extensions is the right one. -// -// Load-bearing levers (each re-verified by removal this session): -// * the `a0v` launder (`__asm__("" : "=r"(a0v) : "0"(a0))`) — drop => 9 mismatched -// * the `a2` $7 pin — drop => 5 -// * the `a2x -> a2` launder (vs a plain copy) — drop => 1 -// * `new_var3` (the s16 stash of dx feeding ratan2) — drop => 2 -// * `new_var2` (the desc.y + 0x10 accumulator) — drop => 2 -// The `a2` pin's live range ENDS before the first `jal` (last use is -// `desc.z = a2[2] - a1[2]`), so it is §42e-CORRECTION / §74-safe to propagate. -// -// SYMBOLS (§58 rule 1/2): all five data externs use the canonical splat spelling and -// the engine_core.h type — `u8 D_801202A0[]`, `u8 D_801152A8[]`, `s16 D_801152AC`, -// `u8 D_8018585C[]`, `s16 currentLocationId`. symcheck: SYMS-OK, 12 symbols agree. -// -// The one deliberate divergence (§27 step 2 / rule 3): func_80135A4C's canonical -// extern is 4-arg but this call site sets only $a0-$a2, so the canonical decl is -// kept verbatim (it is also the TU's own spelling at ov_SC01_077_after.c:1651/1709) -// and the ARITY is cast at the call site. -// -// BANKING NOTE for the orchestrator (carried forward from SESSION-18, still true): -// 1 `self_decl_hdr` axis remains — DEFINE_func_8014D790's body declares -// func_8014D820, so that macro in engine_core.h needs the §85 return-axis widen -// (already applied). With the `Ent_8014D820` collision gone the TU's cc1 stage is clean. - - - - - - - - - - -extern s16 currentLocationId; -extern s32 ratan2(s32 a0, s32 a1); -extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_800139C8(s32 a0, void *a1, void *a2); -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8014DCE0(s32 a0, s32 a1, s32 a2); -extern s32 func_80133784(s32 a0, void *a1, s32 a2); -s32 func_8014D820(s32 a0, u16 *a1, u16 *a2x) -{ - - extern u8 D_801202A0[]; - extern u8 D_8018585C[]; - extern u8 D_801152A8[]; - extern s16 D_801152AC; - /* BLOCK-SCOPE types — see the header note. `Ent_8014D820` at file scope collides with - src/shared/engine_types.h:434 and kills the TU's cc1 stage (exit 33). */ - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_8014D820; - typedef struct EntD820_8014D820 - { - u16 f0; - u16 f2; - u16 f4; - u16 x; - u16 f8; - u16 y; - u16 fC; - u16 z; - u8 p10[0x10]; - s32 f20; - u8 p24[0x34]; - s32 f58; - u16 f5C; - u16 f5E; - u8 p60[0x10C - 0x60]; - } Ent_8014D820; - int new_var2; - s16 new_var3; -register u16 *a2 __asm__("$7"); - V4_8014D820 out[3]; - V4_8014D820 pos; - Desc desc; - Ent_8014D820 *ent; - Ent_8014D820 *p; - s32 dx; - s32 dz; - s32 ex; - s32 ez; - s32 r1; - s32 r2; - s32 r3; - s32 ang; - s32 x0; - s32 y0; - s32 z0; - s32 tx; - s32 tz; - s32 ty; - s32 r; - s32 t; - s32 u; - s32 a0v; -__asm__ __volatile__("" : "=r"(a2) : "0"(a2x)); - t = a2[0]; - u = a1[0]; - dx = t - u; -__asm__ __volatile__("" : "=r"(a0v) : "0"(a0)); - new_var3 = (s16) dx; - t = a2[2]; - u = a1[2]; - dz = t - u; - if (((s16) (dx | dz)) == 0) - { - goto fail; - } - desc.x = dx; - desc.y = a2[1] - a1[1]; - desc.z = a2[2] - a1[2]; - ent = *((Ent_8014D820 **) (a0v + 0x170)); - if (ent->f0 == 0) - { - goto fail; - } - if ((ent->f5C & 0x1000) == 0) - { - goto fail; - } - if (ent->f58 == 0) - { - goto fail; - } - if (((s32 (*)(s32, s32, s32)) func_80135A4C)(ent->f20, ent->f58, (s32) a1) == 0) - { - goto fail; - } - ex = ent->x - (*((u16 *) (a0v + 6))); - ez = ent->z - (*((u16 *) (a0v + 0xE))); - r1 = (s16) ratan2((s16) dz, new_var3); - r2 = (s16) ratan2((s16) ez, (s16) ex); - r3 = (s16) func_80012A60(r1, r2); - if (0x400 <= r3) - { - goto fail; - } - desc.f20 = 0; - desc.f1C = 0; - desc.f18 = 0; - x0 = ent->x; - pos.x = x0; - y0 = ent->y; - pos.y = y0; - z0 = ent->z; - tx = x0 + desc.x; - pos.z = z0; - tz = z0 + desc.z; - desc.x = tx; - desc.z = tz; - ty = (y0 + desc.y) + 8; - desc.y = ty; - if (currentLocationId != 0x3008) - { - for (p = (Ent_8014D820 *) D_801202A0; p < (Ent_8014D820 *) (D_801202A0 + 0x6480); p++) - { - if (p == ent) - { - continue; - } - if (p->f0 == 0) - { - continue; - } - if (p->f5C == 0) - { - continue; - } - if (p->f58 == 0) - { - continue; - } - func_80135888(p->f20, p->f58, (s32) (&pos), (s32) (&desc)); - } - - } - else - { - ang = ratan2(((s16) x0) - ((s16) tx), ((s16) z0) - ((s16) tz)) & 0xFFF; - func_800139C8(ang, D_8018585C, &out[0]); - func_800139C8((s16) (ang - 0x155), D_8018585C, &out[1]); - func_800139C8((s16) (ang + 0x155), D_8018585C, &out[2]); - out[0].x += pos.x; - out[0].y = pos.y; - out[0].z += pos.z; - out[1].x += pos.x; - out[1].y = pos.y; - out[1].z += pos.z; - out[2].x += pos.x; - out[2].y = pos.y; - out[2].z += pos.z; - for (p = (Ent_8014D820 *) D_801202A0; p < (Ent_8014D820 *) (D_801202A0 + 0x6480); p++) - { - if (p == ent) - { - continue; - } - if (p->f0 == 0) - { - continue; - } - if (p->f5C == 0) - { - continue; - } - if (p->f58 == 0) - { - continue; - } - if (func_8014DCE0((s32) p, (s32) (&pos), (s32) (&out[0])) != 0) - { - __builtin_memcpy((void *) ((s32) (&desc)), (void *) ((s32) (&pos)), 8); - } - } - - } - r = func_80133784(0, &pos, (s32) (&desc)); - if ((r == 0) || ((r == 0x2000) && (((*(u16 *) D_801152A8) | ((u16) D_801152AC)) == 0))) - { - ent->x = desc.x - desc.f18; - ent->y = desc.y; - ent->z = desc.z - desc.f20; - desc.x -= pos.x; - desc.y -= pos.y; - desc.z -= pos.z; - *((u16 *) (a0v + 6)) = a1[0] + desc.x; - new_var2 = desc.y; - new_var2 = new_var2 + 0x10; - *((u16 *) (a0v + 0xA)) = a1[1] + new_var2; - *((u16 *) (a0v + 0xE)) = a1[2] + desc.z; - } - else - { - *((u16 *) (a0v + 6)) = a1[0]; - *((u16 *) (a0v + 0xA)) = a1[1] + 0x10; - *((u16 *) (a0v + 0xE)) = a1[2]; - } - return 1; - fail: - *((s32 *) (a0v + 0x170)) = 0; - - return 0; -} - - -DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ - - -DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ - - - -extern void func_8014DF94(s32); - -void func_8014DF3C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014DF94\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ - - -DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ - - -DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014e284 (src/shared) */ - - - -extern void func_8014E48C(s32); - -void func_8014E434(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014E48C\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ - - -DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ - - -extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); -extern s32 func_8014D2A0(s32 arg0, void *a1, void *a2); -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); -// -// The return type is LOAD-BEARING here (see DECAY note below), so `void` is not an option. -// Fix = the §37/§124 ASM-LABEL ALIAS, the same lever that banked func_8014C4AC today -// (.run/sweep/*/func_8014C4AC.c): define the body under the C name aF8014E5B4 carrying -// __asm__("func_8014E5B4"). The emitted symbol is unchanged, the C identifier never collides -// with the macro's extern, and NO tracked header edit is needed — the engine_core.h:13392 -// §85 return-axis widen described in the old banking note is now UNNECESSARY. -// Byte-checked: match_one MATCH (0 mismatches) before and after the rename. -// The alias line MUST travel with the body to every sibling overlay. -// -// DECAY FIX (2026-08-01, REDRAFT lane) — why the return type cannot be `void`: with `void`, -// gcc-2.7.2 drops the value axis entirely: no `addiu $v0,$zero,0x1`, no `addu $v0,$zero,$zero` -// at .L8014E674, and the `j .L8014E678` merge disappears (the taken path falls straight into -// the shared epilogue), which also frees $v0 so the last `lhu` lands in $v0 instead of the -// target's $v1. `s32` fixes all 23 mismatches at once. -// -// Keys (same D_801202A0 96-entry / stride-0x10C sweep as the func_8014CF04 and func_8014D2A0 -// siblings, so most of it is the already-banked idiom): -// -// (1) LOOP-BOUND DUALITY, register-relative BOTH ends (differs from func_8014CF04!). The -// target computes `addiu $v1,$s1,0x6480` for the ENTRY guard and then a separate -// `addu $s5,$v1,$zero` AFTER the guard branch for the loop-carried bound. That extra -// copy is 1 whole instruction: the plain `e = p + 0x6480; if (p < e)` spelling folds it -// away and compiles to 58 ins. The spelling that reproduces it is -// `if (p < p + 0x6480) { e = p + 0x6480; ... }` -// — the guard makes $v1, CSE turns the in-body `e = p + 0x6480` into a copy of it, and -// regalloc does not coalesce (gcc-2.7.2 has no coalescing, regalloc.md K8). The back edge -// then uses the register ($s5), NOT a rematerialised %hi/%lo(D_80126720) as in -// func_8014CF04 — so do NOT reuse that sibling's absolute-bound half here. -// -// (2) TWO INDUCTION VARIABLES, secondary base +0xE. `q = p + 0xE` carries every access except -// the two that use the entry pointer itself (`*(u16 *)p` and `*(u8 **)(a0+0x17C) = p`): -// offsets -0x8 / 0x0 / 0x12 / 0x4A / 0x4E off q == 0x6 / 0xE / 0x20 / 0x58 / 0x5C off p. -// A single-pointer spelling is NOT equivalent: gcc emits ONE base and the function comes -// out 56 ins (verified). The negative displacement is the tell that the second pointer is -// in the source, not a compiler-made giv. -// -// (3) REGISTER PINS ($16/$17) — the one non-obvious lever, and it is a genuine density -// knife-edge (regalloc.md K2 / §RC-15). Unpinned, the .lreg reads -// p: 9 refs / 24 insns -> floor_log2(9)*9/24 = 1.125 -// q: 8 refs / 22 insns -> floor_log2(8)*8/22 = 1.091 -// so p wins $s0 by ~3% and the whole function comes out with p/q SWAPPED (17 mismatches, -// every one of them a bare $s0<->$s1 rename). The target wants q in $s0. Decl-order swap -// does nothing (ties are not what decides it — p genuinely out-scores q). Rather than -// hunt a +1-ref anchor (§RC-11 `#APP` would sit next to three delay slots that maspsx -// fills: the `beqz $a1` slot, the `jal` slot and the `bnez` slot), pin both: -// register u8 *p __asm__("$17"); register u8 *q __asm__("$16"); -// Both are callee-saved, so the live-across-`jal` range is §42e/§74-safe by construction -// (the ov_SC03_099 func_8014D820 caveat only applies to caller-saved pins). Everything -// else falls out naturally: a0->$s2, a1->$s3, a2->$s4, e->$s5. -// -// (4) `t = *(s32 *)(q + 0x4A)` is loaded ONCE and reused as arg1 of func_80135888 — that is -// why `lw $a1, 0x4A($s0)` sits at the zero-test rather than at the call. -// -// The func_80135888 decl below is byte-compatible with the one this TU already carries at -// ov_SC01_077_after.c:2303, so it is not a second conflict axis. - -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); - -/* §37/§124 asm-label alias: the fleet canon declares this `extern void` (engine_core.h:13392, - * inside DEFINE_func_8014E48C()); the byte-true body must return s32. Aliasing the C name - * sidesteps the RETURN-axis conflict with no header edit. This line MUST travel with the body. */ -s32 aF8014E5B4(s32 a0, void *a1, void *a2) __asm__("func_8014E5B4"); - -DEFINE_func_8014E5B4() /* dedup: shared engine-core @0x8014E5B4 (src/shared) */ - - - -extern void func_8014E6F8(struct SubE6F8*); - -void func_8014E6A0(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014E6F8\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ - - -DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ - - -DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ - - - - -void func_8014E934(s32 _arg0) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014E98C\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ - - -DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ - - -extern int D_801C8540; -extern s32 func_8014ED80(struct SubED80*); - -void func_8014ED28(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014ED80\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ - - -DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ - - - -extern s32 func_8014F24C(struct SubF24C*); - -void func_8014F1F4(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F24C\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ - - -DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ - - -DEFINE_func_8014F3E8() /* dedup: shared engine-core @0x8014f3e8 (src/shared) */ - - -extern int D_801C8544; -extern s32 func_8014F4C0(s32); - -s32 func_8014F468(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F4C0\n" - "lui $at, %%hi(D_801C8544)\n" - "sw $v0, %%lo(D_801C8544)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8544)\n" - "lw $v0, %%lo(D_801C8544)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014F4C0() /* dedup: shared engine-core @0x8014f4c0 (src/shared) */ - - -extern int D_801C8544; -extern int func_8014F74C(); - -int func_8014F6F4(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F74C\n" - "lui $at, %%hi(D_801C8544)\n" - "sw $v0, %%lo(D_801C8544)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8544)\n" - "lw $v0, %%lo(D_801C8544)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ - - - -// @class: other -// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_801C8544; maspsx auto-fills jal delay slot) - -extern s32 func_8014FA70(s32 a0); - -void func_8014FA04(s32 a0) -{ - - extern s32 D_801C8544; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "sw $ra, 16($sp)\n" - "lw $v0, 68($a0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 1f\n" - "addu $v0, $zero, $zero\n" - "lui $a1, 0x1f80\n" - "ori $a1, $a1, 0x03fc\n" - "addu $t0, $a1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "lui $at, %%hi(D_801C8544)\n" - "sw $v0, %%lo(D_801C8544)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8544)\n" - "lw $v0, %%lo(D_801C8544)($v0)\n" - "1:\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ - - - -extern s32 func_8014FC18(u8*); - -void func_8014FBC0(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FC18\n" - "lui $at, %%hi(D_801C8544)\n" - "sw $v0, %%lo(D_801C8544)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8544)\n" - "lw $v0, %%lo(D_801C8544)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ - - - -extern int func_8014FD54(int); - -void func_8014FCFC(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FD54\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ - - -DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ - - - -DEFINE_func_8014FE60() /* dedup: shared engine-core @0x8014FE60 (src/shared) */ - - -DEFINE_func_8014FFDC() /* dedup: shared engine-core @0x8014ffdc (src/shared) */ - - -DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ - - -DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ - - -DEFINE_func_801502EC() /* dedup: shared engine-core @0x801502ec (src/shared) */ - - -DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ - - - - -extern void func_801504D8(u16 *a0); - -s32 func_80150480(s32 _arg0) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_801504D8\n" - "lui $at, %%hi(D_801C8540)\n" - "sw $v0, %%lo(D_801C8540)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_801C8540)\n" - "lw $v0, %%lo(D_801C8540)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ - - -DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ - - -DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ - - -extern void func_80147324(s32 a0); -extern void func_8014ACE8(void *a0, s32 a1, s32 a2); -extern void func_8014ADA8(s32 a0, s32 a1); -extern void func_8014BB24(s32 a0, s32 a1, s32 a2); - - - -s32 func_801506A4(s32 arg0, s32 arg1) { - - extern u16 aD80078EB4 __asm__("D_80078EB4"); - extern void func_80150820(s32, s32); - extern void func_8015086C(int); - extern unsigned short D_8018586C[]; - extern unsigned short D_80185874[]; - extern unsigned short D_8018587C[]; - - int mode; - - mode = ((struct Ent_801506A4 *)arg1)->unk0; - ((struct Ent_801506A4 *)arg1)->unk5C |= 1; - switch (mode) { - case 0x31: - ((void(*)(int))func_80147324)(0x452); - ((void(*)(int, unsigned))func_8014ADA8)(((int)arg0), D_8018586C[((struct Ent_801506A4 *)arg1)->unk70]); - ((void(*)(int, int, unsigned))func_8014ACE8)(((int)arg0), 3, D_8018586C[((struct Ent_801506A4 *)arg1)->unk70]); - break; - case 0x32: - if ((*(unsigned short*)&aD80078EB4) != 0) { - ((void(*)(int))func_80147324)(0x452); - ((void(*)(int, unsigned, int))func_8014BB24)(((int)arg0), D_80185874[((struct Ent_801506A4 *)arg1)->unk70], 1); - ((void(*)(int, int, unsigned))func_8014ACE8)(((int)arg0), 2, D_80185874[((struct Ent_801506A4 *)arg1)->unk70]); - } - break; - case 0x33: - ((void(*)(int))func_80147324)(0x452); - ((void (*)(int, unsigned))func_80150820)(((int)arg0), D_8018587C[((struct Ent_801506A4 *)arg1)->unk70]); - break; - case 0xC5: - case 0x27B: - ((void(*)(int))func_80147324)(0x452); - func_8015086C(((int)arg0)); - break; - } -} - - -DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ - - -DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ - - -DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ - - -DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ - - - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_8015094C; - -extern s32 func_80021174(s32 a0, s32 a1); - -s32 func_8015094C(s32 param_1) { - - extern S16 D_801C7B94; - extern s32 D_80185884; - extern s32 D_80126990; - extern s32 D_80126994; - extern u8 D_80126948[]; - struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ - S16 local; /* 0x10 @ 0x40 */ - s32 pad1[4]; /* 0x10 @ 0x50 */ - register u8 *cam __asm__("$17") = D_80126948; - s32 ret; - - local = D_801C7B94; - arg.x = *(short *)(param_1 + 6); - arg.mid = D_80126994; - arg.y = *(short *)(param_1 + 0xe); - ret = func_80021174(D_80185884, (s32)&arg); - if (ret == 0) { - { - short cur = *(short *)(param_1 + 6); - s32 diff = D_80126990 - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - { - short cur = *(short *)(param_1 + 0xe); - s32 diff = *(s32 *)(cam + 0x50) - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - (void)&pad1; - return 1; - } - return 0; -} - - - -extern s32 func_8014FA70(s32 a0); -extern void func_80015978(s32 a0, s32 *a1); - -void func_80150A70(s32 a0) -{ - - extern s32 D_801C8544; - __asm__ __volatile__( - ".set\tnoreorder\n" - "addiu $sp, $sp, -24\n" - "sw $s0, 16($sp)\n" - "addu $s0, $a0, $zero\n" - "sw $ra, 20($sp)\n" - "lh $v1, 6($s0)\n" - "lh $v0, 136($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 10($s0)\n" - "lh $v0, 138($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 14($s0)\n" - "lh $v0, 140($s0)\n" - "nop\n" - "beq $v1, $v0, 3f\n" - "nop\n" - "1:\n" - "lw $v0, 68($s0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 2f\n" - "addiu $a0, $s0, 4\n" - "lui $a2, 0x1f80\n" - "ori $a2, $a2, 0x03fc\n" - "addu $t0, $a2, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "addu $a0, $s0, $zero\n" - "lui $at, %%hi(D_801C8544)\n" - "sw $v0, %%lo(D_801C8544)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "addiu $a0, $s0, 4\n" - "2:\n" - "jal func_80015978\n" - "addiu $a1, $s0, 136\n" - "3:\n" - "lw $ra, 20($sp)\n" - "lw $s0, 16($sp)\n" - "addiu $sp, $sp, 24\n" - ".set\treorder\n" - : : : "memory"); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) - - -void func_80150B28(int param_1) { - - extern s32 D_800AE6B0; - extern void (*D_80185888[])(void); - u32 idx; - register u32 sub __asm__("$2"); - - if ((D_800AE6B0 & 0x80FFFFFF) == 0) { - idx = *(u16 *)(param_1 + 0x16C); - if (idx != 0 && idx < 0x26) { - sub = idx - 1; - D_80185888[sub](); - } - } - *(u16 *)(param_1 + 0x16C) = 0; -} - - -void func_80150B9C(void) { -} - -DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ - - -DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ - - -DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ - - -DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ - - -DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ - - -DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ - - -DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ - - -DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ - - -DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ - - -DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ - - -DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ - - -DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ - - -DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ - - -DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ - - -DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ - - -DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ - - -DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ - - -DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ - - -DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ - - -DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ - - -DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ - - -void func_80150F78(void) { -} - -DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ - - -DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ - - -DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ - - -DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ - - -DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ - - -DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ - - -DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ - - -void func_801510B8(void) { -} - -void func_801510C0(void) { -} - -DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ - - -DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ - - -DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ - - -void func_80151130(void) { -} - -DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ - - -DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ - - -DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ - - -DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ - - -DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ - - -DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ - - -DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ - - -DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ - - -DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ - - -DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ - - - -/* func_80151664 — INTEGRATE lane. - * Fleet canon (src/shared/engine_core.h:2924, inside DEFINE_func_8015410C()) declares - * extern void func_80151664(void); - * so a `void func_80151664(s32 a0)` definition is `conflicting types` in every TU that - * expands that macro (ov_SC01_077_after.c:3910 does). Cookbook §73 PARAMS axis / §42: - * keep the canonical (void) signature and read the incoming argument through a $a0 pin. - * The decl below is reproduced verbatim so this file compiles the real conflict. */ -extern void func_80151664(void); - -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801470AC(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80153C18(); /* fleet canon: K&R empty prototype (engine_core.h:75, :1682 defines it (void)); - * a prototyped (s32) decl is `conflicting types` in this TU. Arg still - * passes in $a0 under default promotions -> codegen unchanged. */ - -void func_80151664(void) { - register s32 a0v __asm__("$4"); - s32 s0; - s32 v1; - - s0 = a0v; - func_80154A74(s0, 0x11); - func_801553C0(s0); - func_801470AC((s32 *)s0); - func_801472B4((void *)s0); - v1 = *(s32 *)(s0 + 0x20); - *(s16 *)(s0 + 0x3E) = 0; - *(s16 *)(s0 + 0x40) = 0; - *(s16 *)(s0 + 0x42) = 0; - *(s8 *)(s0 + 0xDD) = 0; - *(s16 *)(s0 + 0x3C) = *(u16 *)(s0 + 0x3C) & 0xFFFE; - *(s16 *)(v1 + 0x10) = 0; - *(s16 *)(s0 + 0x60) = 0x1000; - *(s16 *)(s0 + 0x62) = 0x1000; - *(s16 *)(s0 + 0x64) = 0x1000; - func_801477E8((s32 *)s0, 0); - func_80153C18(s0); -} - - -DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ - - -DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ - - -DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ - - -void func_80151878(void) { -} - -DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ - - -DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ - - -DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ - - - - -void func_80151944(void *a0) { - - extern void (*D_8018591C[])(void); - D_8018591C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ - - -DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ - - -DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ - - -DEFINE_func_80151B98() /* dedup: shared engine-core @0x80151b98 (src/shared) */ - - -DEFINE_func_80151C54() /* dedup: shared engine-core @0x80151c54 (src/shared) */ - - - - -void func_80151D24(void *a0) { - - extern void (*D_8018592C[])(void); - D_8018592C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ - - -DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ - - -DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ - - -DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ - - -DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ - - -DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ - - - - -void func_80152058(void *a0) { - - extern void (*D_80185950[])(void); - D_80185950[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); - -void func_801520DC(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_80185940; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_801472C8(arg0); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_80185940); - func_801477E8(arg0, 0x40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); - func_80147324(0x441); - func_80146CA0(arg0); -} - - -DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ - - -DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ - - -DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ - - -DEFINE_func_801522CC() /* dedup: shared engine-core @0x801522cc (src/shared) */ - - - - -void func_80152370(void *a0) { - - extern void (*D_80185964[])(void); - D_80185964[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (67 ins) - -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80019064(void *a0); -extern int func_80151204(int arg, int a1); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8001382C(s32 a0, void *a1, void *a2); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - - -void func_801523F4(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern s32 D_800D58AC; - extern u8 D_80185970[]; - s32 pad[4]; - s32 buf[4]; - register s32 s0a __asm__("$16"); /* $s0 = buf */ - register s32 s2a __asm__("$18") = (s32)&D_80185970; /* $s2 = &D_80185970 */ - - ((void (*)(s32, s32))func_80146E90)(arg0, 0); - func_80019064(&D_80062C04); - ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); - if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), - (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); - } else { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); - } - func_80154A74(arg0, 0x16); - ((void (*)(s32))func_80149020)(arg0); - s0a = (s32)buf; - ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, - s2a, s0a); - ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); - ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); - func_80147324(0x451); - ((void (*)(s32))func_80146CA0)(arg0); - (void)pad; -} - - -DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ - - -DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ - - - - -void func_80152698(void *a0) { - - extern void (*D_80185980[])(void); - D_80185980[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ - - -DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ - - -DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ - - - - -void func_8015282C(void *a0) { - - extern void (*D_80185998[])(void); - D_80185998[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_801528B0(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_80185988; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_80185988); - func_801477E8(arg0, 0xFFF00000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ - - -DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ - - -DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ - - -DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ - - - - -void func_80152B6C(void *a0) { - - extern void (*D_801859AC[])(void); - D_801859AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ - - -DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ - - -DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ - - -DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ - - - - -void func_80152D24(void *a0) { - - extern void (*D_801859C8[])(void); - D_801859C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_80152DA8(s32 arg0) -{ - - extern s32 D_80062C14; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_801859B8; - func_80019064(&D_80062C14); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - M2C_FIELD(arg0, s8 *, 0xDF) = 8; - func_80146DB8(arg0, &D_801859B8); - func_801477E8(arg0, 0xFFE40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ - - -DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ - - -DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ - - -DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ - - - - -void func_80153060(void *a0) { - - extern void (*D_801859DC[])(void); - D_801859DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ - - -DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ - - -DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ - - -DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ - - -DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ - - -DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ - - - - -void func_80153320(void *a0) { - - extern void (*D_801859F0[])(void); - D_801859F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ - - -DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ - - -DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ - - -DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ - - -DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ - - -DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ - - -DEFINE_func_801535F4() /* dedup: shared engine-core @0x801535F4 (src/shared) */ - - -DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ - - -DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ - - -extern void func_80015954(s32 a0, s32 a1); -extern void func_80015978(s32 a0, s32 *a1); -extern void func_800139C8(s32 a0, void *a1, void *a2); -extern s32 func_80153978(s32 a0, u16 *src); -extern void *memcpy(void *dst, const void *src, u32 n); -s32 func_80153800(s32 a0) { - - extern void (*D_8011DB28)(s32 a0); - extern u8 D_80126DB0[]; - extern u16 D_80126DB6; - s32 s1 = a0; - s32 s0; - s32 s2; - u8 bVar1; - s16 buf1[4]; - s16 buf2[4]; - if (D_8011DB28 != 0) { - ((void (*)(s32, s32))func_80015978)(s1 + 4, s1 + 0x88); - memcpy((void *)(s1 + 0x90), (void *)(s1 + 0x88), 8); -ret0: - return 0; - } - bVar1 = *(u8 *)(s1 + 0xDE); - if (bVar1 >= 0x21) { - s32 base = (s32)D_80126DB0; - func_80015954(base, s1 + 4); - memcpy((void *)(s1 + 0x88), (void *)base, 8); - memcpy((void *)(s1 + 0x90), (void *)(s1 + 0x88), 8); - *(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = D_80126DB6; - return 0; - } - { - register s32 m __asm__("$3") = bVar1 * 4; - s2 = m; - buf2[1] = *(u16 *)(s1 + 0xA2) - m; - } - for (s0 = 0; s0 < 0x80; s0++) { - s32 ang = s0 * 0x200000; - buf1[0] = 0; - buf1[1] = 0; - buf1[2] = s2; - func_800139C8(ang >> 0x10, buf1, buf1); - buf2[0] = *(u16 *)(s1 + 0xA0) + buf1[0]; - buf2[2] = *(u16 *)(s1 + 0xA4) + buf1[2]; - if (((s32 (*)(s32, void *))func_80153978)(s1, buf2) == 0) { - goto ret0; - } - } - *(u8 *)(s1 + 0xDE) = *(u8 *)(s1 + 0xDE) + 1; - return 1; -} - - -DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ - - -extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); - -typedef struct { - u16 f0, f2, f4; - s16 f6; -} Blk801539F8; - -s32 func_801539F8(s32 a0, void *a1) -{ - Blk801539F8 buf1; - Blk801539F8 buf2; - Blk801539F8 buf3; - s32 r1, r2, r3; - - buf1 = *(Blk801539F8 *)(a0 + 0xA0); - buf2 = *(Blk801539F8 *)a1; - buf1.f2 -= 4; - r1 = func_80133784(0, &buf1, (s32)&buf2); - if (r1 != 0x2000) { - return 1; - } - buf1 = buf2; - buf2.f2 += 8; - r2 = func_80133784(0, &buf1, (s32)&buf2); - if (r2 != r1) { - return 1; - } - r3 = func_80133784(2, &buf2, (s32)&buf3); - if (r3 != r2) { - return 1; - } - *(s16 *)(a0 + 0x88) = buf2.f0; - *(s16 *)(a0 + 0x8A) = buf2.f2; - *(s16 *)(a0 + 0x8C) = buf2.f4; - *(Blk801539F8 *)(a0 + 0x90) = *(Blk801539F8 *)(a0 + 0x88); - return 0; -} - - -DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ - - -DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ - - -DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ - - -DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ - - -DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ - - -DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ - - -DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ - - -DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ - - -DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ - - -DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls -extern void func_80019064(void *a0); - -void func_80153CCC(S80153CCC *a0) { - - extern s32 D_80185A04; - extern void (*D_80185A2C[])(void *a0); - extern s16 D_8011DB0C; - extern u16 D_8011F748; - ((s32 (*)(s32))func_80019064)((s32)&D_80185A04); - D_80185A2C[a0->idx](a0); - D_8011DB0C = 0; - D_8011F748 = 0; -} - - -DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (33/33) - -extern void func_80147324(s32 arg0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_80146CA0(void *a0); -extern s16 currentLocationId; - -void func_80153D7C(s32 param_1) -{ - - extern u8 D_80185A0C; - func_80147324(0x451); - func_80154274((s32 *)param_1, (s32)&D_80185A0C); - func_80149020((s32 *)param_1); - *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); - *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); - *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); - if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; - else *(u8 *)(param_1 + 0xde) = 10; - *(u8 *)(param_1 + 0xdf) = 0; - __asm__ __volatile__("" ::: "memory"); - func_80146CA0((void *)param_1); -} - - -DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ - - -DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ - - -DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ - - -DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ - - -DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ - - -DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ - - -DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ - - -DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ - - -DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ - - -DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ - - -DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ - - -DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ - - -DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ diff --git a/src/ov_SC02_037/ov_SC02_037_jr_801458E0.c b/src/ov_SC02_037/ov_SC02_037_jr_801458E0.c new file mode 100644 index 000000000..a6812e365 --- /dev/null +++ b/src/ov_SC02_037/ov_SC02_037_jr_801458E0.c @@ -0,0 +1,5132 @@ +#include "common.h" +#include "../shared/engine_core.h" + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern void func_80029444(void); +extern void func_800D1754(void); +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern s32 func_801508B4(s32); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern s32 func_8016E95C(); +extern void func_801754A8(void); +extern void func_8013BC7C(); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern int func_801288E8(int arg0); +extern int func_80128940(int arg0); +extern void func_80010AE0(s32 a0); +extern CdFileLoc cdFileLocTable[]; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s32 func_80128C98(s32 arg0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(); +extern void func_8012944C(void); +extern void func_80015B6C(s32, s16, s32, s16, s32, s32, s32, s32, s32, s32); +extern void GsSortBg(s32 *, void *, u16, s32 *); +extern void GsSortFastBg(s32 *, void *, u16, s32 *); +extern unsigned short D_800B99F0; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern s32 D_80126E60[]; +extern s8 D_801150D6; +extern s8 D_801152C0; +extern u8 D_80127504; +extern void func_800144D4(void); +extern void func_80129C40(s32 _arg0); +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern s32 D_80126F04[]; +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern s32 D_800AE688[]; +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A018(s32 a0, s32 a1); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern void func_8012A1BC(void); +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 func_80012F74(s32, s32, s32, s32); +extern void func_8012A418(void); +extern Vec8 D_80114F24; +extern void func_8012A464(void); +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s32 func_80047D3C(s32 a0); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_8012A6D0(void* a0, void* a1); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern void func_8012ACA0(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern Mat32 D_800AE620; +extern void RotMatrixX(int r, void *m); +extern void RotMatrixY(int r, void *m); +extern void RotMatrixZ(int r, void *m); +extern s32 func_8012B4B8(int param_1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern s32 func_8012B77C(s32 out, s32 a1, s32 a2); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8012C098(void *param_1); +extern s32 func_8012C0EC(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C750(s32 a0); +extern s32 func_8012C820(u8 *a0); +extern u16 D_801274E4[]; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern s32 func_8012CC88(); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012CC88(s32 a0, s32 a1, s32 a2); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(s32 arg0); +extern void func_8012E138(); +extern void func_8012DFD4(u8 *a0); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012E014(s32 a0); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_80049CAC(); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern s32 func_80135888(); +extern void func_8012E138(int model); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern void func_8012E364(s32 arg0_); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern s32 func_8016B428(s32); +extern void func_80019064(void *); +extern void func_8012E9C0(int param_1); +extern void func_8012EA90(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern s32 aF8012EFB8(); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_80015954(s32 a0, s32 a1); +extern void func_8012F274(s32 a0, s32 a1); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void func_8004914C(); +extern void func_800491AC(); +extern s32 RotTransPers(s32, s32, s32*, s32*); +extern s32 * func_8012F40C(s32 *param_1, s32 param_2); +extern s32 * func_8012F49C(s32 *param_1, s32 param_2, s32 param_3); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_8012F8C8(int param_1); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern void func_80131B14(void); +extern void func_8012FCC4(int param_1); +extern void func_8012FDA8(int param_1); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern void func_8012CBF4(s32); +extern s32 func_80131D68(s32 a0, s32 a1); +extern void func_80130650(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130A18(u8 *a0); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void func_8012CBCC(s32); +extern void func_80131E00(struct S80131E00*, s32); +extern void func_80130C08(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_80131CF4(s32 a0); +extern void func_80019064(void *a0); +extern s32 aF80131CA8(); +extern s32 aF80131CF4(); +extern int func_80131D68(int a0, int a1); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void func_80131EEC(void *a0); +extern void func_80131F28(void *a0); +extern void func_80131F64(void *a0); +extern void func_80131FA0(void *a0); +extern void func_80131FDC(void *a0); +extern void func_8001C214(int, int); +extern void func_80132018(int param_1); +extern void func_801320D0(void); +extern void func_801320D8(int param_1); +extern void func_80132144(int param_1); +extern void func_801321B0(int param_1); +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void gteMIMefunc(); +extern void func_801325B8(int dst, int src, int m0, int mm, int arg5); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_80135888(s32, s32, s32, s32); +extern void func_80132F40(s32 arg0); +extern void func_801330E0(void * param_1, s16 * param_2, s32 param_3); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_801330E0(); +extern void func_8013339C(s16 *a0, s16 *a1); +extern void func_80133298(s32 *a0); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern char D_801C841C[]; +void func_80136BC4(s32 a0); +extern void func_8013373C(s32 a0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133AB0(s16 flag, s16 x, s16 y, s32 arg3); +extern s32 func_80133CD4(); +extern s32 func_80134310(Vec3s *a0, Vec3s *a1, s32 a2); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int param_1, s16 param_2, s16 param_3, int param_4); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_801365B8(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void func_80136C54(void); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern u16 D_80126CC4; +extern M2C_UNK func_800153CC(M2C_UNK, u16, M2C_UNK, M2C_UNK, s32, s32); +extern void func_80136DFC(void); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80136F3C(s32 a0, s32 a1); +extern void func_80137030(s16 a0, s16 a1); +extern void func_80137178(s32 a0, s32 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 aF80137614(); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern void func_80139BE0(s32 a0); +extern void * aF801376E8(); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern void func_8013A860(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern s32 D_801269F0; +extern s16 D_801269F4; +extern s32 D_801269F8; +extern void func_80138BE0(s32 a0); +extern void func_80137BD8(s32 a0); +extern void func_8013A380(void); +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80137DD4(s32 ent, u8 *arg, u8 *work); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(u8 *arg0, u8 arg1, s32 arg2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void func_80138C30(void *a0); +extern void func_80139C7C(u8 *a0); +extern s32 func_8013A8FC(s32 arg0); +extern s32 func_80138C60(s32 arg0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_801395D4(void * a0); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013DBE4(); +extern void func_8013D9B0(); +extern void func_8013D330(void); +extern void func_8013D178(void); +extern void func_8013CF68(void); +extern void func_8013CB84(void); +extern void func_8013CF68(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D53C(void *); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_8013D53C(void *arg0v); +extern void func_800599B8(u16*); +extern void func_8013D9B0(int param_1); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EF88(); +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern s16 D_8011512A; +extern u16 D_8011512E; +extern u8 D_80115140[]; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical redecl (§8e) */ +extern u8 D_8011515C; /* macro-canonical redecl (§8e) */ +extern u8 D_80184CA8[]; +extern u8 D_80184CC0[]; +extern u16 D_80184BC4[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical redecl (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +extern short D_80115128; +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +extern s32 func_8014032C(s32 param_1, s32 param_2); +extern u8 D_80115148[]; +extern u8 D_80062BDC; +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern s32 *func_80140D68(s32 *, Prim4 *, s32, s32, s32); +extern s32 * func_80140958(); +extern s32 * func_80140D68(); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern int func_80029FE4(void); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); +extern int func_80141100(int param_1); +extern Prim_1412A8 * aF801412A8(); +extern void func_800291A0(s32, s32); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_801415C0(s32 param_1, s32 param_2); +extern u8 D_80115149[]; +extern u8 D_80115158[]; +extern u8 D_8011514D; +extern u8 D_8011515C; +extern s32 func_800D11F0(s32 a0); +extern s32 func_800D1658(s32 a0); +extern s32 func_801416D4(s16 param_1); +extern void func_8001903C(void); +extern void func_801417C4(void); +extern u8 D_800B9A16; +extern u16 D_80115114; +extern void func_801417F8(void); +extern void func_800D24A0(int); +extern void func_8002D4C8(int, int); +extern void func_80141C0C(int); +extern s32 func_801418F8(void); +extern s32 func_80141A60(); +extern void func_8013FAF8(s16, s16); +extern s32 D_801151D0; +extern u16 D_80115116; +extern void func_80141B90(void); +extern u16 D_80184F60[]; +extern s32 func_80015144(void); +extern unsigned char D_80112C04[]; +extern unsigned char D_80112C50[]; +extern unsigned char D_80112C9C[]; +extern unsigned char D_80112CE8[]; +extern unsigned char D_80112D38[]; +extern unsigned char D_80112D78[]; +extern unsigned char D_80112DBC[]; +extern unsigned char D_80112DF4[]; +extern unsigned char D_80112E14[]; +extern unsigned char D_80112E40[]; +extern unsigned char D_80112E6C[]; +extern unsigned char D_80112EBC[]; +extern unsigned char D_80112F0C[]; +extern unsigned char D_80112F48[]; +extern unsigned char D_80112F9C[]; +extern unsigned char D_80112FDC[]; +extern unsigned char D_8011302C[]; +extern unsigned char D_80113074[]; +extern unsigned char D_801130B8[]; +extern unsigned char D_801130E8[]; +extern unsigned char D_80113138[]; +extern unsigned char D_8011317C[]; +extern unsigned char D_801131A8[]; +extern unsigned char D_801131E8[]; +extern unsigned char D_80113214[]; +extern unsigned char D_80113254[]; +extern unsigned char D_80113278[]; +extern unsigned char D_801132B8[]; +extern unsigned char D_801132E4[]; +extern unsigned char D_80113324[]; +extern unsigned char D_80113360[]; +extern unsigned char D_801133A4[]; +extern unsigned char D_801133F4[]; +extern unsigned char D_80113440[]; +extern unsigned char D_80113474[]; +extern unsigned char D_801134B0[]; +extern unsigned char D_801134FC[]; +extern unsigned char D_80113530[]; +extern unsigned char D_80113554[]; +extern unsigned char D_801135A8[]; +extern unsigned char D_80113600[]; +extern unsigned char D_80113650[]; +extern unsigned char D_80113694[]; +extern unsigned char D_801136DC[]; +extern unsigned char D_80113724[]; +extern unsigned char D_80113744[]; +extern unsigned char D_80113770[]; +extern unsigned char D_80113794[]; +extern unsigned char D_801137D8[]; +extern unsigned char D_8011381C[]; +extern unsigned char D_8011383C[]; +extern unsigned char D_8011386C[]; +extern unsigned char D_801138A4[]; +extern unsigned char D_801138D0[]; +extern unsigned char D_80113900[]; +extern unsigned char D_80113944[]; +extern unsigned char D_80113964[]; +extern unsigned char D_8011399C[]; +extern unsigned char D_801139E8[]; +extern unsigned char D_80113A28[]; +extern unsigned char D_80113A50[]; +extern unsigned char D_80113A84[]; +extern unsigned char D_80113AB0[]; +extern unsigned char D_80113AE0[]; +extern unsigned char D_80113B34[]; +extern unsigned char D_80113B68[]; +extern unsigned char D_80113BA4[]; +extern unsigned char D_80113BC0[]; +extern unsigned char D_80113BF0[]; +extern unsigned char D_80113C20[]; +extern unsigned char D_80113C3C[]; +extern unsigned char D_80113C7C[]; +extern unsigned char * func_80141CA4(void); +extern void func_80142414(s32 a0, s16 a1); +extern void func_80142454(s32 a0); +extern void func_801424E4(short *param_1); +extern void func_801425CC(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern s32 func_8012AD50(void *a0); +extern void func_80142608(s32 param_1); +extern void func_801426D4(s32 a0); +extern void func_80142740(int param_1); +extern void func_80142778(u8 *a1); +extern void func_801427DC(void); +extern void func_801427E4(void); +extern void func_801427EC(int param_1); +extern s32 func_80142DB8(s32 *a0); +extern void func_80142BB4(s32 *a0, s32 a1, s32 a2); +extern void func_80142C9C(s32 *a0); +extern void func_80142838(s32 *a0); +extern s32 func_80142D38(s32 *a0); +extern void func_801428CC(s32 *a0); +extern void func_8014292C(int param_1); +extern void func_80142978(int param_1); +extern void func_801429C4(int param_1); +extern void func_80142A80(void); +extern void func_80142A10(int param_1); +extern void func_80142C84(s32 a0); +extern void func_80143994(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); +void func_801439C0(u8 *a0); +void func_8012AD44(s32 *a0, s16 a1); +void func_8012C218(void *a0); +void func_8012C098(void *param_1); +extern void func_80142BB4(s32* param_1, s32 param_2, s32 param_3); +extern void func_80142C7C(void); +extern void func_80142C9C(s32 * arg0); +extern void func_80142DC4(int param_1); +extern void func_80142E38(int param_1); +extern void func_80142EC0(s32 param_1); +extern void func_80142F68(s32 *a0); +extern void func_80142FFC(s32 *a0); +extern void func_8014305C(int param_1); +extern void func_801430F4(s32 *a0); +extern void func_80143188(s32 *a0); +extern int func_8001CA88(int, void *); +extern void func_800233CC(void *, unsigned short); +extern void func_801431E8(s32 param_1); +extern void func_801432FC(s32 *a0); +extern void func_80143390(s32 *a0); +extern void func_80143458(); +extern void func_801433F0(s32 a0); +extern void func_80143458(s32 param_1); +extern void func_8014358C(); +extern void func_8014350C(s32 *a0); +extern void func_8014358C(s32 param_1); +extern s32 rand(void); +extern void func_80143640(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801437D8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80143970(s32 a0); +extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); +extern void func_801439C0(u8 *a0); +extern s16 D_801152AC; +extern s16 D_801152AA; +extern void func_801439FC(s32 a0); +extern void func_80143B30(void *a0); +extern s32 func_80143B6C(s32 arg0, s32 arg1); +extern void func_80143BDC(u16 *a0); +extern void func_80143C38(void *a0); +extern void func_80143C74(s32 a0, s32 a1); +extern void func_80143C98(void *a0); +extern void ApplyMatrixSV(void*, Svec_801372B0*, Svec_801372B0*); +extern void func_80143D28(s32 param_1); +extern void func_80143E68(void *a0); +extern void func_80143EA4(void); +extern void func_80143EAC(void); +extern void func_80143EB4(void); +extern void func_80143EBC(s32 a0); +extern void func_80144054(void *a0); +extern void func_80144090(s32 param_1); +extern void func_801442F8(int param_1); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80144364(int param_1); +extern void func_80144458(void *arg0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern void func_80144558(u8 *param_1); +extern void func_8014462C(u8 *a0); +extern void func_801446A4(int param_1); +extern void func_8014477C(void *param_1); +extern void func_80144880(s32 param_1); +extern void func_80144988(s32 a0); +extern void func_801449C8(void *a0); +extern void func_80144A04(s32 *a0); +extern void func_80144A2C(void *a0); +extern void func_80144A68(s32 *a0); +extern void func_80144A90(void); +extern void func_80144A98(u8 *a0); +extern int func_80144B14(int param_1); +extern void func_80144AEC(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern int func_80144B14(int param_s0); +/* ==== end §8b carried decl layer ==== */ + +void func_801458E0(void) { +} + +DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80186144 block defeats the tail-merge of the two identical D_80186144 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145934(void) { + + extern u8 D_80186144; + extern u8 D_801860B4; + extern u8 D_80186090; + extern u8 D_8018606C; + extern u8 D_80186120; + extern u8 D_801860FC; + extern u8 D_801860D8; + extern u8 D_80186048; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_80186144; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80186144 load from being + * tail-merged with the v>=0x384 D_80186144 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_801860B4; + } else if (v >= 0x578) { + p = &D_80186090; + } else if (v >= 0x514) { + p = &D_8018606C; + } else if (v >= 0x384) { + p = &D_80186144; + } else if (v >= 0x258) { + p = &D_80186120; + } else if (v >= 0xC8) { + p = &D_801860FC; + } else if (v >= 0xA) { + p = &D_801860D8; + } else { + p = &D_80186048; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_801861D4 block defeats the tail-merge of the two identical D_801861D4 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145A2C(void) { + + extern u8 D_801861D4; + extern u8 D_801860B4; + extern u8 D_80186090; + extern u8 D_8018606C; + extern u8 D_801861B0; + extern u8 D_8018618C; + extern u8 D_80186168; + extern u8 D_80186048; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_801861D4; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_801861D4 load from being + * tail-merged with the v>=0x384 D_801861D4 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_801860B4; + } else if (v >= 0x578) { + p = &D_80186090; + } else if (v >= 0x514) { + p = &D_8018606C; + } else if (v >= 0x384) { + p = &D_801861D4; + } else if (v >= 0x258) { + p = &D_801861B0; + } else if (v >= 0xC8) { + p = &D_8018618C; + } else if (v >= 0xA) { + p = &D_80186168; + } else { + p = &D_80186048; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + +DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ + + +DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ + + +DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ + + + + +void func_80145CEC(void) { + extern int func_8001C320(); + extern s32 func_80029504(void); + extern int func_801552F4(); + extern int func_80147084(); + extern int func_80147098(); + extern int func_801470AC(); + extern int func_80149210(); + extern int func_8014BE9C(); + extern int func_8016533C(); + extern int func_801627C0(); + extern int func_80162AF4(); + extern int func_80165C78(); + extern int func_801468C8(); + extern int func_80145EE8(); + extern int func_8014C968(); + extern int func_8014C6D0(); + extern int func_80165938(); + extern int func_80153C8C(); + extern int func_800290BC(); + extern s32 D_800AFAE8; + extern s32 D_800DE2A4; + extern s32 D_801152C8; + extern s32 D_801855BC; + extern s32 * D_80126B78[1]; + extern s32 * D_800AF7C8; + extern s32 * D_80126B90; + extern s16 D_80126BB8; + extern s16 D_80126BBA; + extern s16 D_80126BBC; + extern s16 D_80126BC0; + extern s16 D_80126BC2; + extern s16 D_80126BC4; + extern s16 D_80126BC8; + extern s16 D_80126BCA; + extern s16 D_80126BCC; + extern s16 D_80126D10; + extern s16 D_80126D12; + extern s16 D_80126C4E; + extern s16 currentLocationId; + extern s32 D_8011F9C4; + extern s32 D_8012707C; + extern s32 D_8011DB10; + extern s32 D_80126B58; + + unsigned int uVar1; + s32 pad[2]; + (void)&pad; + + func_80016714(&D_80126B58, 0x254); + D_80126B78[0] = (s32 *)&D_800AFAE8; + D_800AF7C8 = (s32 *)&D_801152C8; + func_8001C320(&D_800AFAE8, &D_800DE2A4); + *(s32 *)((s32)D_80126B78[0] + 0x28) = 0x7fff7fff; + D_80126B90 = (s32 *)&D_801855BC; + *(u16 *)((s32)D_80126B78[0] + 0x18) = 0x1000; + D_80126BC8 = 0x1000; + D_80126BC0 = 0x1000; + D_80126BB8 = 0x1000; + *(u16 *)((s32)D_80126B78[0] + 0x1a) = 0x1000; + D_80126BCA = 0x1000; + D_80126BC2 = 0x1000; + D_80126BBA = 0x1000; + *(u16 *)((s32)D_80126B78[0] + 0x1c) = 0x1000; + D_80126BCC = 0x1000; + D_80126BC4 = 0x1000; + D_80126BBC = 0x1000; + D_80126D12 = 0x1000; + D_80126D10 = 0x1000; + D_80126C4E = 0x1000; + func_801552F4(&D_80126B58); + func_80147084(&D_80126B58); + func_80147098(&D_80126B58); + func_801470AC(&D_80126B58); + *(u16 *)((s32)D_80126B78[0] + 0x2c) = *(u16 *)((s32)D_80126B78[0] + 0x2c) | 0x50; + func_80149210(&D_80126B58, 8); + func_8014BE9C(); + func_8016533C(); + func_801627C0(); + func_80162AF4(); + func_80165C78(); + func_801468C8(&D_80126B58, 1); + if (currentLocationId != 0x30a2 && currentLocationId != 0x30a5) { + func_80145EE8(0); + } + func_8014C968(); + func_8014C6D0(); + D_8011F9C4 = 0; + func_80165938(); + func_80153C8C(); + D_8012707C = 0; + D_8011DB10 = 0; + uVar1 = ((int (*)())func_80029504)(); + if (uVar1 >= 10) { + func_800290BC(); + } +} + + + + +// @class: schedule +// @stuck: branch layout — 3-way dispatch on param_1; trying switch form + +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); + + +void func_80145EE8(s32 param_1) +{ + + extern unsigned char D_801855CC[]; + extern unsigned char D_801855FC[]; + extern unsigned char D_8018564C[]; + extern unsigned char D_8018567C[]; + extern unsigned char D_801856AC[]; + switch (param_1) { + case 0: + if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { + ((void (*)(void *))func_80146014)(D_801855CC); + } + if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { + ((void (*)(void *))func_80146014)(D_801855FC); + } + if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { + ((void (*)(void *))func_80146014)(D_8018564C); + } + if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { + ((void (*)(void *))func_80146014)(D_8018567C); + } + if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { + return; + } + ((void (*)(void *))func_80146014)(D_801856AC); + break; + case 1: + ((void (*)(void *))func_80146014)(D_801855CC); + ((void (*)(void *))func_80146014)(D_801855FC); + ((void (*)(void *))func_80146014)(D_8018564C); + ((void (*)(void *))func_80146014)(D_8018567C); + ((void (*)(void *))func_80146014)(D_801856AC); + break; + } +} + + +DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ + + +void func_80146074(void) { +} + + +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(); + +void func_8014607C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146128\n" + "lui $at, %%hi(D_801C8538)\n" + "sw $v0, %%lo(D_801C8538)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8538)\n" + "lw $v0, %%lo(D_801C8538)($v0)\n" + "nop\n" + "beqz $v0, .L80146114\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146360\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_801463A0\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + ".L80146114:\n" + "nop\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +s32 func_80146128(void) +{ + + extern s32 D_80126B58; + extern s32 *D_80126B78; + extern u8 D_80078EC1; + extern s32 D_80078EC8; + extern s32 D_80126B9C; + extern s32 D_8011F730; + extern u16 D_801152B8; + extern u16 D_8012693A; + extern u8 D_80126BE0[]; + extern u8 D_801150F0[]; + register s32 base __asm__("$16"); + register s32 *p __asm__("$17"); + p = D_80126B78; + base = (s32)&D_80126B58; + func_80146FC4(base); + memcpy((void *)D_801150F0, (void *)D_80126BE0, 8); + func_80150A70(base); + ((void (*)(s32))func_80147098)(base); + func_8014A638(base); + D_8011F730 = 0; + D_801152B8 = 0; + D_8012693A = 0; + if (D_80078EC1 == 0x10 && D_80078EC8 != 0) { + *(u16 *)((s32)p + 2) = 6; + D_80126B9C |= 0x800; + } else { + *(u16 *)((s32)p + 2) = 1; + *(s32 *)(base + 0x44) &= ~0x800; + } + if (*(s32 *)(base + 0x1B0) != 0) { + *(s32 *)(base + 0x1B0) = *(s32 *)(base + 0x1B0) - 1; + } + if (func_80155458(base) == 0 && (*(s32 *)(base + 0x44) & 0x4000000) == 0) { + if ((func_80029104() & 0xFF) != 0) { + func_8014ADE0(base); + func_8014B350(base); + ((void (*)(s32))func_8014B7A4)(base); + ((void (*)(s32))func_80161D58)(base); + } + func_80029344(); + func_80161A90(base); + ((void (*)(s32))func_8014B504)(base); + func_80149BEC(base); + ((void (*)(s32))func_8014B5D0)(base); + ((void (*)(s32))func_8014C99C)(base); + func_8014B190(base); + func_80148648(base, 0); + ((void (*)(s32))func_80149228)(base); + func_8014A59C(base); + ((void (*)(s32))func_8016F14C)(base); + ((void (*)(s32))func_80154418)(base); + func_80154BE4(base); + func_80165694(base); + func_801654A8(base); + func_8014A680(base); + func_8014A6A8(base); + func_8014A71C(base); + ((void (*)(s32))func_80172588)(base); + ((void (*)(s32))func_801473DC)(base); + ((void (*)(s32, s32))func_80015978)(base + 4, base + 0x98); + return 1; + } + ((void (*)(s32, s32))func_80015978)(base + 4, base + 0x98); + return 0; +} + + + +// @class: struct +// @stuck: none — MATCH (fnptr-table idiom: D_801856FC[u8 idx](&arg)) + +void func_80146360(void) +{ + + extern void (*D_801856FC[])(void *); + extern u8 D_80126BA4; + /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every + LATER function in this TU, which blocks a byte-true decl of a different type. + Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ + extern s32 D_80126B58; + D_801856FC[D_80126BA4](&D_80126B58); +} + + + + + + + /* size 8, align 1 -> unaligned block move */ + +DEFINE_func_801463A0() /* dedup: shared engine-core @0x801463A0 (src/shared) */ + + +DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ + + +DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ + + +DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ + + +DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ + + +DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ + + +DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ + + +DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ + + +DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ + + +DEFINE_func_801466F0() /* dedup: shared engine-core @0x801466f0 (src/shared) */ + + +DEFINE_func_80146750() /* dedup: shared engine-core @0x80146750 (src/shared) */ + + +DEFINE_func_8014680C() /* dedup: shared engine-core @0x8014680c (src/shared) */ + + +DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ + + +DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ + + +DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ + + +DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ + + + +extern void func_80146AFC(void*); +void aF80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6) __asm__("func_80146A6C"); +void aF80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6) +{ + u8 sp[0x18]; + *(s16 *)(sp + 0x0) = a0; + *(s32 *)(sp + 0x8) = a1; + *(s16 *)(sp + 0x2) = a2; + *(s16 *)(sp + 0x4) = a3; + *(s16 *)(sp + 0x6) = a4; + *(s32 *)(sp + 0xC) = a5; + *(s32 *)(sp + 0x10) = a6; + ((s32 (*)(void *))func_80146AFC)(sp); +} + + +DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ + + +extern s32 func_80146B9C(void * arg0); + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_80146AFC; + +/* func_80146AFC — ASCENDING twin of the byte-proven DEFINE_func_80146B9C() + * in src/shared/engine_core.h (cookbook §71: find the already-matched sibling first). + * Same 0x58-stride slot table (base D_8011D030), same 7-store copy body in the same + * order, same $a2/$a1 giv pair. 80146B9C walks DOWN; this one walks UP, so the guard + * is `p < end`, end = p + 0xA50 (30 slots x 0x58). + * + * DECAY ROOT CAUSE (this redraft): the stored backlog draft had been rewritten to + * `void func_80146AFC(...)`, which drops BOTH `return 0` paths' `addu $v0,$zero,$zero` + * and the hit path's `j .L80146B94` => LENGTH-DRIFT -2 (38 vs 40) plus $v0/$v1 regalloc + * drift on the final lw/sw pair. Restoring the s32 return type (the fleet spelling the + * banked sibling func_80146B9C already uses) restores MATCH at 40/40. + * + * RECONCILE (2026-08-01) — the whole-binary gate failed with + * ov_SC01_077_after.c:592: conflicting types for `D_8011D030' (previous decl :564) + * TWO file-scope collisions were present; both are fixed HERE, with NO edit to + * src/shared/engine_core.h and NO change to the generated code (re-verified MATCH + * after each step): + * + * 1. D_8011D030 (the reported one). DEFINE_func_801469C8() emits + * `extern s32 D_8011D030;` at FILE scope (engine_core.h:10811, above the + * `s32 func_801469C8(...) {` line), and this TU expands that macro at :564 — + + extern s32 D_8011D030; + * i.e. before the splice point :570. The draft's `extern u16` therefore + * redeclared it incompatibly at :592. Conformed to the TU's `extern s32`. + * Codegen-neutral: the sole use is `(u8 *)&D_8011D030`, an address-of, so the + * declared object type never reaches a load/store width (cookbook §20). + * + * 2. func_80146AFC ITSELF (latent, would have surfaced next). DEFINE_func_8014C010() + * (:13510) and DEFINE_func_8014AD30() (:13524) each emit a file-scope + * `extern void func_80146AFC(void *a0);`, and this TU expands them at :1386 and + * :1541 — after the splice — so an `s32 func_80146AFC` definition collides on the + * RETURN axis. Fixed with the §37/§124 ASM-LABEL ALIAS: the C identifier is + * aF80146AFC, the emitted label is func_80146AFC, so the canonical void decl and + * this s32 definition never share a namespace. Callers discard the result, so the + * void-typed call sites stay codegen-identical. + * + * Both were reproduced and then cleared against the real cpp+cc1-2.7.2 pair using a + * synthetic copy of this TU's declaration environment (.run/uc2/_recon_probe_80146AFC.c): + * the pre-reconcile spelling emits exactly the gate's error pair; the spelling below + * compiles clean. + * + * ORACLE: tools/match_one.py func_80146AFC --c .run/uc2/func_80146AFC.c + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_after -> MATCH (40 ins) + */ + + +s32 aF80146AFC(void *arg0) __asm__("func_80146AFC"); + +s32 aF80146AFC(void *arg0) +{ + register u8 *p __asm__("$6"); + register u8 *q __asm__("$5"); + u8 *end; + p = (u8 *)&D_8011D030; + end = p + 0xA50; + if ((u32)p < (u32)end) { + q = p + 0x30; + do { + if (*(u16 *)p == 0) { + *(s32 *)(q + 0x4) = *(s32 *)((u8 *)arg0 + 0x8); + *(s16 *)p = *(u16 *)((u8 *)arg0 + 0x0); + *(s16 *)(q - 0x2A) = *(u16 *)((u8 *)arg0 + 0x2); + *(s16 *)(q - 0x26) = *(u16 *)((u8 *)arg0 + 0x4); + *(s16 *)(q - 0x22) = *(u16 *)((u8 *)arg0 + 0x6); + *(s32 *)(q - 0x4) = *(s32 *)((u8 *)arg0 + 0xC); + *(s32 *)(q + 0x0) = *(s32 *)((u8 *)arg0 + 0x10); + return (s32)p; + } + p += 0x58; + q += 0x58; + } while ((u32)p < (u32)end); + } + return 0; +} + + +DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ + + +DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ + + +DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ + + +DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ + + +DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ + + +DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ + + +DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ + + +DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ + + +DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ + + +DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ + + +DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ + + +DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ + + +DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ + + +DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ + + +DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ + + +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void*, Svec_801372B0*, Svec_801372B0*); +void func_80146F58(s32 a0, s32 a1) { + s16 vec[3]; + u8 mat[0x20]; + vec[0] = func_8012A68C(); + vec[1] = func_8012A758(); + vec[2] = 0; + func_8004978C(vec, mat); + ((void (*)(void *, void *, void *))ApplyMatrixSV)(mat, (void *)a0, (void *)a1); +} + + +extern void func_80015954(s32 a0, s32 a1); +extern void *memcpy(void *dst, const void *src, u32 n); +void func_80146FC4(s32 a0) { + + extern u8 D_80126DB0[]; + extern u16 D_80126DB6; + s32 s1 = a0; + s32 s0; + if (*(s16 *)(s1 + 0xA) >= 0x401) { + s0 = (s32)D_80126DB0; + func_80015954(s0, s1 + 0x4); + memcpy((void *)(s1 + 0x88), (void *)s0, 8); + *(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = D_80126DB6; + } +} + + +DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ + + +DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ + + +DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ + + +DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ + + +DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ + + +DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ + + +DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ + + +DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ + + +DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ + + +DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ + + +DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ + + +DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ + + +DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ + + +DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ + + +DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ + + +DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ + + +DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ + + +DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ + + +DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ + + +DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ + + +DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ + + +DEFINE_func_80147364() /* dedup: shared engine-core @0x80147364 (src/shared) */ + + +DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ + + +DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ + + +DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ + + +DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ + + +DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ + + +DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ + + +DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ + + +DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ + + +DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ + + +DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ + + +DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ + + +DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ + + +DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ + + +DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ + + +DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ + + +DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ + + +DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ + + +DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ + + +DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ + + +DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ + + +DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ + + +DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ + + +DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ + + +DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ + + +DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ + + +DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ + + +DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ + + +DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ + + +DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ + + +DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ + + +DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ + + +DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ + + +DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ + + +DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ + + +DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ + + +DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ + + +DEFINE_func_801483E8() /* dedup: shared engine-core @0x801483e8 (src/shared) */ + + +DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ + + +DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ + + +DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ + + +DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ + + +DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ + + +DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ + + +DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ + + +DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ + + +DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ + + +DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ + + +DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ + + +DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ + + +DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ + + +DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ + + +DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ + + +DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ + + +DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ + + +DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg + +extern s32 ratan2(s32 a0, s32 a1); + +int func_80148AFC(void *a0) { + + extern s32 D_801151D4; + extern ActorFn D_80185704[]; + s32 p = (s32)a0; + s32 iVar5 = *(s32 *)(p + 0x20); + register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 sVar3; + u8 bVar1; + __asm__("" : "=r"(tmp) : "0"(tmp)); + sVar3 = tmp; + bVar1 = *(u8 *)(p + 0xA9); + + switch (bVar1) { + case 0x41: + return D_80185704[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; + case 0x53: + case 0x73: + { + register u32 bb __asm__("$3"); + register s32 c80 __asm__("$2") = 0x80; + register s32 lo __asm__("$4"); + register s32 hi __asm__("$2"); + bb = *(u16 *)(p + 0xAE); + lo = bb & 0xFF; + if (lo != c80 || (hi = bb >> 8) != 0x80) { + s32 sVar4; + __asm__ __volatile__("" : : : "memory"); + sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); + *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; + return 1; + } + return 0; + } + } +} + + +DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ + + +DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ + + +DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ + + +DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ + + +DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ + + +DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ + + +DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ + + +DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ + + +DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ + + +DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ + + +DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ + + +DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ + + +DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ + + +DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ + + +DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ + + +DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (68 ins) +extern s32 ratan2(s32 a0, s32 a1); + +s32 func_80148D44(void) { + + extern s32 D_801151D4; + extern u8 D_80126C01; + extern u16 D_80126C02; + extern u16 D_80126C06; + extern s32 D_80185744[]; + register s32 ang __asm__("$16"); + register s32 a __asm__("$4"); + s32 p; + s32 res; + s32 d; + + p = D_801151D4; + a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), + *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; + d = (s32)D_80126C01; + __asm__ __volatile__("" : : "r"(a)); + ang = a; + if (d == 0x53) { + goto final; + } + if (d < 0x54) { + if (d == 0x41) { + goto call; + } + return 0x41; + } + if (d != 0x73) { + return 0x73; + } + goto final; +call: + return (s32)(s16)((s16 (*)())(D_80185744[D_80126C02 >> 0xc]))(); +final: + { + u32 e = D_80126C06; + if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { + return -1; + } + __asm__ __volatile__("" : : : "memory"); + res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; + } + return res; +} + + + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80185784) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80185784[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80185784[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + + +DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ + + +DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ + + +DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ + + +DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ + + +DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ + + +DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ + + +DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ + + +DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ + + +DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ + + +DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ + + +DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ + + +DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ + + +DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ + + +DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ + + +DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ + + +DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ + + +DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ + + +DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ + + +DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ + + +DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ + + +DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ + + +DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ + + +DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ + + +DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ + + +DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ + + +DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ + + +DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ + + +DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ + + +DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ + + +DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ + + +DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ + + +DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ + + +DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ + + +DEFINE_func_80149350() /* dedup: shared engine-core @0x80149350 (src/shared) */ + + +DEFINE_func_80149374() /* dedup: shared engine-core @0x80149374 (src/shared) */ + + +DEFINE_func_801493D0() /* dedup: shared engine-core @0x801493d0 (src/shared) */ + + +DEFINE_func_8014942C() /* dedup: shared engine-core @0x8014942c (src/shared) */ + + +void func_8012F038(int param_1, short *param_2, short *param_3); + +void func_80149450(int param_1, short *param_2) +{ + short tmp_out[3]; + short tmp_in[3]; + + tmp_in[0] = param_2[1]; + tmp_in[1] = param_2[3]; + tmp_in[2] = param_2[5]; + + func_8012F038(*(int *)(param_1 + 0x20) + 0x34, tmp_in, tmp_out); + + param_2[1] = tmp_out[0]; + param_2[3] = tmp_out[1]; + param_2[5] = tmp_out[2]; +} + + +extern void func_8012F038(int param_1, short *param_2, short *param_3); + +void func_801494CC(int param_1, short *param_2, short *param_3) +{ + short temp_out[3]; + short temp_in[3]; + + temp_in[0] = param_2[1]; + temp_in[1] = param_2[3]; + temp_in[2] = param_2[5]; + + func_8012F038(*(int *)(param_1 + 0x20) + 0x34, temp_in, temp_out); + + param_3[1] = temp_out[0]; + param_3[3] = temp_out[1]; + param_3[5] = temp_out[2]; +} + + +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012EF70(s32 a0, s32 a1); + +void func_80149544(s32 a0, s32 a1, s32 a2) +{ + s32 buf[2]; + + func_8012F14C(*(s32 *)(a0 + 0x20) + 0x34, a1, buf); + func_8012EF70(buf, a2); +} + + +void func_8012F14C(s32 a0, s32 a1, s32 a2); +void func_8012EFB8(s32 a0); + +void func_80149584(s32 a0, s32 a1, s32 a2) +{ + char local_10[8]; + + func_8012F14C(*(s32*)((char*)a0 + 0x20) + 0x34, a1, (s32)local_10); + ((void (*)(s32, s32))func_8012EFB8)((s32)local_10, a2); +} + + +DEFINE_func_801495C4() /* dedup: shared engine-core @0x801495C4 (src/shared) */ + + +DEFINE_func_8014964C() /* dedup: shared engine-core @0x8014964c (src/shared) */ + + +DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ + + +DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ + + +DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ + + +DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ + + +DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ + + +DEFINE_func_801497A8() /* dedup: shared engine-core @0x801497a8 (src/shared) */ + + +DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ + + +DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ + + +DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ + + +DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ + + +/* callees (JSON-canonical, verbatim) */ +extern void func_80015978(s32 a0, s32 *a1); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80147364(); +extern s32 func_800CCF28(s32 a0); +extern u16 *func_80146750(u16 *param_1); + +/* data (JSON-canonical, verbatim) */ +extern u8 D_80126B5C; +extern void *D_8012707C; + +/* not in the JSON data list but required by the asm (%hi/%lo currentLocationId); + type per src/shared/engine_core.h DEFINE_func_80149954() sibling macro (lh => s16) */ +extern s16 currentLocationId; + +s32 func_80149954(s32 s0) +{ + s32 sp10[2]; + s16 buf[10]; + + if (*(s32 *)(s0 + 0x44) & 0x404) { + return 0; + } + if ((*(u16 *)(s0 + 0xAA) & 0x90) == 0) { + if (currentLocationId == 0x308D) { + func_80015978((s32)&D_80126B5C, sp10); + func_8012E5CC((s32)sp10, 0x4, 0x8E0); + return 0; + } + func_8002D4C8(0x4, 0x8E0); + return 0; + } + if (*(u16 *)(s0 + 0xAC) & 0x90) { + if ((s32)D_8012707C == 0x8E0) { + D_8012707C = 0; + } else { + func_80147364(0x8E0, 0); + } + } + func_800CCF28(s0); + *(s16 *)((s32)buf + 0x0) = 0x12; + *(s32 *)((s32)buf + 0x8) = s0; + *(s16 *)((s32)buf + 0x2) = 0; + *(s16 *)((s32)buf + 0x4) = -0x1E; + *(s16 *)((s32)buf + 0x6) = 0; + *(s32 *)((s32)buf + 0xC) = 0; + *(s32 *)((s32)buf + 0x10) = 0; + func_80146750(buf); + return 1; +} + + +DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ + + +DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ + + +DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ + + +DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ + + +DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ + + +DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ + + +DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ + + +DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ + + +DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ + + +DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ + + +DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ + + +DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ + + +DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ + + +DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ + + +DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ + + +extern void func_80144A04(s32 *a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern void func_8016EDEC(s32, s32, s32); +s32 func_80149F2C(s32 a0, s32 a1) +{ + void *s1 = a0; + s32 *s0; + if (*(u16 *)a1 == 0x83 || *(u16 *)a1 == 0x61) { + s0 = (s32 *)((s32 (*)())func_80144A04)((s32 *)a1); + if (s0 != 0) { + func_801599A4(s1); + func_80159B3C(s1); + ((void (*)(s32, s32))func_8016EDEC)((s32)s0, 0x1000000); + return 1; + } + } + return 0; +} + + +void func_80149FA8(void) { +} + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins) +extern s16 currentLocationId; + +s32 func_80149FB0(s32 a0) { + + extern s32 D_801857C4[]; + extern u8 D_80078E78[]; + s32 *p = &D_801857C4[0]; + register s32 v __asm__("$3") = *p; + u8 *q = &D_80078E78[0]; + s32 loc; + + if (v != 0) { + loc = currentLocationId; + p = p + 1; + do { + if (loc == v) { + goto ret0; + } + v = *p; + p = p + 1; + } while (v != 0); + } + + if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { + return 0; + } + if (*(s16 *)(a0 + 0x1C8) != 0) { + return 0; + } + if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { + ret0: + return 0; + } + v = q[0x48]; + q[0x48] = v ^ 0x80; + return 1; +} + + +extern u8 func_8014BEF8(void); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3); +extern void func_8014A1B0(s32 a0, s32 a1); +extern u8 D_801202A0[]; + +typedef struct { + /* 0x00 */ s16 a30; + /* 0x02 */ s16 a2e; + /* 0x04 */ s16 a2c; + /* 0x06 */ s16 pad06; + /* 0x08 */ s32 buf[2]; + /* 0x10 */ s16 a20; + /* 0x12 */ s16 a1e; + /* 0x14 */ s16 a1c; +} Loc_8014A048; + +s32 func_8014A048(s32 param_1) { + Loc_8014A048 L; + s32 s0; + s32 s2; + u32 s3; + + if ((*(u32 *)(param_1 + 0x44) & 0x400) != 0) { + return 0; + } + if ((*(u16 *)(param_1 + 0xAC) & 0x80) == 0) { + if ((*(u16 *)(param_1 + 0xAC) & 0x10) == 0) { + return 0; + } + if (((s32 (*)(s32))func_8014BEF8)(param_1) == 0) { + goto ret0; + } + } + L.a30 = *(s16 *)(param_1 + 6); + L.a2e = *(s16 *)(param_1 + 0xA); + L.a2c = *(s16 *)(param_1 + 0xE); + L.a1e = -0x10; + L.a20 = 0; + L.a1c = -0x20; + func_8012F14C(*(s32 *)(param_1 + 0x20) + 0x34, (s32)&L.a20, (s32)L.buf); + s3 = 0; + s2 = 0; + while (1) { + s0 = (s32)D_801202A0 + s2; + __asm__ __volatile__("" : "=r"(s0) : "0"(s0)); + if ((*(u16 *)s0 != 0) && + (*(s32 *)(s0 + 0x58) != 0) && + (*(s16 *)(s0 + 0xAA) == 0) && + (*(s32 *)(param_1 + 0x184) != s0) && + ((*(u16 *)(s0 + 0x5C) & 0x200) != 0) && + (func_80135260(*(s32 *)(s0 + 0x20), *(s32 *)(s0 + 0x58), &L.a30, (s16 *)L.buf) != 0)) { + break; + } + s3++; + s2 += 0x10C; + if (s3 >= 0x60) { + return 0; + } + } + *(s32 *)(param_1 + 0x178) = s0; + func_8014A1B0(param_1, s0); + return 1; +ret0: + return 0; +} + + +DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ + + +DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ + + +DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ + + +DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ + + +DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ + + +DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ + + +DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ + + +DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ + + +DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ + + +DEFINE_func_8014A51C() /* dedup: shared engine-core @0x8014a51c (src/shared) */ + + +DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ + + +DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ + + +DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ + + +DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ + + +DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ + + +DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ + + +DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ + + +DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ + + + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_8014A738; + + + + + + + + +DEFINE_func_8014A738() /* dedup: shared engine-core @0x8014A738 (src/shared) */ + + +DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ + + +DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ + + +DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ + + +DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ + + +DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ + + +DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ + + +DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ + + +DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ + + +DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ + + +DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ + + +DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ + + +DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ + + +DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ + + +DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ade0 (src/shared) */ + + +DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ + + +DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ + + +DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ + + +DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ + + +DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ + + +DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ + + +DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ + + +DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ + + +DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ + + +DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ + + +DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ + + +DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ + + +DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ + + +DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ + + +DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ + + +DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ + + +DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ + + +DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ + + +DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ + + +DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ + + +DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ + + +DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ + + +DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ + + +DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ + + +DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ + + +DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ + + +DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ + + +DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ + + +DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ + + +DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ + + +DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ + + +DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ + + +DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ + + +DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ + + +DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ + + +DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ + + +DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ + + +void func_8014BDE0(void) { +} + +DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ + + +DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ + + +DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ + + +DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ + + +DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ + + +DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ + + +DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ + + +DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ + + +DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ + + +DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ + + +DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ + + +DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ + + +DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ + + +DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ + + +DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ + + +DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ + + +DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ + + +DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ + + +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018584C; + +void func_8014C1A0(s32 arg0, s32 arg1) { + func_8014C1C8(arg0, arg1, &D_8018584C); +} + + +DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ + + +DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ + + +DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ + + +DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ + + +DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ + + +DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ + + +DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ + + + +/* §37/§73/§124 asm-label alias: the fleet canon declares this `extern void` (engine_core.h, inside 8 + * DEFINE_func_* macros); the byte-true body must return s32. Aliasing the C name sidesteps the + * RETURN-axis conflict with no header edit. This line MUST travel with the body. */ +s32 aF8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4) __asm__("func_8014C4AC"); + +DEFINE_func_8014C4AC() /* dedup: shared engine-core @0x8014C4AC (src/shared) */ + + +DEFINE_func_8014C568() /* dedup: shared engine-core @0x8014c568 (src/shared) */ + + +DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ + + + +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); + +s16 func_8014C5D0(s32 a0, s32 a1) { + + extern u8 D_80185854; + return func_8014C5FC(a0, a1, &D_80185854); +} + + +DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ + + +DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ + + +DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ + + +DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ + + +DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ + + + + + +// @class: schedule +// @stuck: none — MATCH (match_one 91/91) +// +// Levers used (all byte-gated on ov_SC07_006): +// 1. §struct 8-byte alignment-1 struct copy `*(M8_8014C6F4*)(a+0x164) = *(M8_8014C6F4*)(p+0x10)` +// -> the lwl/lwr,lwl/lwr,swl/swr,swl/swr block (engine_types.h M8_xxx convention). +// 2. §17 base-pointer cache: `u8 *p = D_80078E78;` (NOT a direct D_80078E78[0x49]) so gcc pins +// the base into callee-saved $s1 and hoists the la into the prologue (live across the jal). +// 3. §17 register pins: the search result `e` MUST be $v0 and the limit `lim` $v1, else +// local-alloc swaps the loop IV/limit pair ($v1<->$a0) and coalesces `e` into the IV. +// 4. DELAY-SLOT lever (new): writing the compare constant as its own pre-loop statement +// (`want = 0x22;`) instead of the literal `0x22` inside the loop test. With the literal, +// loop.c hoists the `li $a1,0x22` into the loop PREHEADER (after the duplicated entry test), +// so reorg.c's guard branch has nothing local to take and instead COPIES the branch-target +// insn (`addu $v0,$zero,$zero`) into its delay slot and redirects past it — a +1 shift that +// also lets the loop-back branch steal the same insn (nop -> move). Materialising the +// constant in the block BEFORE the entry test makes fill_simple_delay_slots take it from +// the preceding insns, reproducing `beqz $v0,.L8014C7F4 / addiu $a1,$zero,0x22` and leaving +// the loop-back delay slot a nop. `want` needs no pin — gcc lands it in $a1 on its own. + + +DEFINE_func_8014C6F4() /* dedup: shared engine-core @0x8014C6F4 (src/shared) */ + + +DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ + + +DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ + + +DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ + + +DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ + + +DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ + + +DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ + + +DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ + + +DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ + + +DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ + + +DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ + + +DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ + + +DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ + + +DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ + + +DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ + + +DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ + + +DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ + + +DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ + + +DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ + + +DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ + + +DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ + + +DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ + + +DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ + + +DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ + + +DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ + + +extern u16 D_80126CC4; + +void func_8014CBE8(void) +{ + (*(s16 *)&D_80126CC4) = 0; +} + + +DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ + + +DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ + + + +extern void func_8014CD0C(u8 *a0); + +void func_8014CCB4(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014CD0C\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ + + +DEFINE_func_8014CD80() /* dedup: shared engine-core @0x8014cd80 (src/shared) */ + + +DEFINE_func_8014CF04() /* dedup: shared engine-core @0x8014CF04 (src/shared) */ + + + +extern void func_8014D0A4(s32); + +void func_8014D04C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014D0A4\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ + + + + +DEFINE_func_8014D12C() /* dedup: shared engine-core @0x8014D12C (src/shared) */ + + + +DEFINE_func_8014D2A0() /* dedup: shared engine-core @0x8014D2A0 (src/shared) */ + + +extern int D_801C8540; +extern void func_8014D438(s32); + +void func_8014D3E0(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014D438\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ + + +DEFINE_func_8014D4C0() /* dedup: shared engine-core @0x8014d4c0 (src/shared) */ + + +extern u8 D_801202A0[]; +extern u8 D_80126720[]; + +s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +s32 func_8014C918(s32 a0, s32 a1); + +DEFINE_func_8014D610() /* dedup: shared engine-core @0x8014D610 (src/shared) */ + + + +extern void func_8014D790(s32); + +void func_8014D738(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014D790\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ + + + typedef struct EntD820_8014D820 + { + u16 f0; + u16 f2; + u16 f4; + u16 x; + u16 f8; + u16 y; + u16 fC; + u16 z; + u8 p10[0x10]; + s32 f20; + u8 p24[0x34]; + s32 f58; + u16 f5C; + u16 f5E; + u8 p60[0x10C - 0x60]; + } Ent_8014D820; + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_8014D820; + +// @class: schedule +// @stuck: none — MATCH (304/304), symcheck SYMS-OK 12/12, and the whole-TU cc1 stage now compiles CLEAN +// +// ══════════════════════════════════════════════════════════════════════════════ +// SESSION-22 RE-DERIVATION + THE ROOT-CAUSE FIX FOR THE "ASSEMBLER-STAGE" FAILURE +// ══════════════════════════════════════════════════════════════════════════════ +// The SESSION-21 draft did reach match_one MATCH (re-verified this session, 304/304) +// and symcheck SYMS-OK — but the whole-binary build died with an opaque `Error 33` +// that was logged as "an ASSEMBLER-stage failure I did not finish diagnosing". +// +// IT IS NOT AN ASSEMBLER FAILURE. Stage-by-stage isolation of the real pipeline +// (cpp | cc1 | maspsx | as) over a scratch copy of src/ov_SC01_077/ov_SC01_077_after.c +// with this function spliced in place of its INCLUDE_ASM gives: +// cpp rc=0 +// cc1 rc=33 <-- ".../tu.c:1901: conflicting types for `Ent_8014D820'" +// "src/shared/engine_types.h:434: previous declaration of `Ent_8014D820'" +// maspsx rc=0 +// as rc=0 (only benign "used $at without .set noat" warnings) +// `33` is CC1's exit code, surfaced by the recipe's `set -o pipefail` (Makefile:560). +// Because `as` is the LAST stage in that pipe, make attributes the failure to the +// assembler — the same misread that made func_8012AAAC's "opaque Error 33" look +// assembler-shaped until it was isolated stage by stage. +// +// ROOT CAUSE: the draft declared `typedef struct Ent_8014D820 { ... } Ent_8014D820;` at FILE scope. +// `Ent_8014D820` is already a shared engine type (src/shared/engine_types.h:434, +// typedef struct { u16 guard; u16 pad; u16 field; u8 rest[14]; } Ent_8014D820; +// a 20-byte struct), pulled into every overlay TU through +// src/ov_SC01_077/../shared/engine_core.h. gcc-2.7.2 rejects the redefinition +// outright (an ERROR, not the "type mismatch with previous external decl" +// WARNING that the rest of this TU is full of), so cc1 aborts. +// +// THE FIX, and why this shape: all three helper types are now declared at BLOCK +// scope inside func_8014D820 itself. That is strictly better than renaming to +// `Ent_8014D820` at file scope, because this function is an h_seq family EXEMPLAR +// with 138 members: a file-scope type name has to stay unique against 138 distinct +// overlay TUs *and* against whatever engine_types.h grows next, while a block-scope +// typedef can never collide with anything, in any TU, ever. It also matches the +// fleet convention — src/shared/engine_core.h contains ZERO `typedef struct` +// (all 0 of them); every DEFINE_ macro body uses engine_types.h types or local ones. +// Typedefs emit no code and create no allocno, so the move is byte-neutral: +// re-verified MATCH (304 ins) after the change, and the local DECLARATION ORDER +// below is untouched (§76 — declaration order is the dominant regalloc lever here). +// +// ══════════════════════════════════════════════════════════════════════════════ +// THE BODY (SESSION-21 derivation, each lever re-verified this session) +// ══════════════════════════════════════════════════════════════════════════════ +// func_8014D820 (304 ins, ov_SC01_077, h_seq family exemplar, 138 members). +// The whole residual off the SESSION-18 close=9 seed was a sched1 PERMUTATION +// inside ONE basic block (idx 79..101, the pos/desc set-up between the `slti 0x400` +// guard and the `currentLocationId` test): identical multiset of insns, identical +// register assignment, wrong positions. §66d-5 exactly — classed WIDTH [structural] +// at every waypoint and not structural at all. +// +// The lever (reusable): that block is 12 statements over a small dependency poset +// (load x0/y0/z0 -> add -> store pos.* / desc.*), so source ORDER is the only +// control and the space of linear extensions is enumerable. A dependency-respecting +// sweep found MATCH at +// x0; pos.x; y0; pos.y; z0; tx; pos.z; tz; desc.x; desc.z; ty; desc.y +// i.e. all three loads and both pos stores first, then the two adds, then the desc +// stores, with the y accumulator (`ty`) computed LAST. No pin, no barrier, no +// permuter run. Eleven hand attempts on this window (SESSION-18) were inert or +// worse — hand-reading a 12-statement schedule permutation is the wrong tool; +// brute-forcing the linear extensions is the right one. +// +// Load-bearing levers (each re-verified by removal this session): +// * the `a0v` launder (`__asm__("" : "=r"(a0v) : "0"(a0))`) — drop => 9 mismatched +// * the `a2` $7 pin — drop => 5 +// * the `a2x -> a2` launder (vs a plain copy) — drop => 1 +// * `new_var3` (the s16 stash of dx feeding ratan2) — drop => 2 +// * `new_var2` (the desc.y + 0x10 accumulator) — drop => 2 +// The `a2` pin's live range ENDS before the first `jal` (last use is +// `desc.z = a2[2] - a1[2]`), so it is §42e-CORRECTION / §74-safe to propagate. +// +// SYMBOLS (§58 rule 1/2): all five data externs use the canonical splat spelling and +// the engine_core.h type — `u8 D_801202A0[]`, `u8 D_801152A8[]`, `s16 D_801152AC`, +// `u8 D_8018585C[]`, `s16 currentLocationId`. symcheck: SYMS-OK, 12 symbols agree. +// +// The one deliberate divergence (§27 step 2 / rule 3): func_80135A4C's canonical +// extern is 4-arg but this call site sets only $a0-$a2, so the canonical decl is +// kept verbatim (it is also the TU's own spelling at ov_SC01_077_after.c:1651/1709) +// and the ARITY is cast at the call site. +// +// BANKING NOTE for the orchestrator (carried forward from SESSION-18, still true): +// 1 `self_decl_hdr` axis remains — DEFINE_func_8014D790's body declares +// func_8014D820, so that macro in engine_core.h needs the §85 return-axis widen +// (already applied). With the `Ent_8014D820` collision gone the TU's cc1 stage is clean. + + + + + + + + + + +extern s16 currentLocationId; +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 a0, s32 a1, s32 a2); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +s32 func_8014D820(s32 a0, u16 *a1, u16 *a2x) +{ + + extern u8 D_801202A0[]; + extern u8 D_8018585C[]; + extern u8 D_801152A8[]; + extern s16 D_801152AC; + /* BLOCK-SCOPE types — see the header note. `Ent_8014D820` at file scope collides with + src/shared/engine_types.h:434 and kills the TU's cc1 stage (exit 33). */ + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_8014D820; + typedef struct EntD820_8014D820 + { + u16 f0; + u16 f2; + u16 f4; + u16 x; + u16 f8; + u16 y; + u16 fC; + u16 z; + u8 p10[0x10]; + s32 f20; + u8 p24[0x34]; + s32 f58; + u16 f5C; + u16 f5E; + u8 p60[0x10C - 0x60]; + } Ent_8014D820; + int new_var2; + s16 new_var3; +register u16 *a2 __asm__("$7"); + V4_8014D820 out[3]; + V4_8014D820 pos; + Desc desc; + Ent_8014D820 *ent; + Ent_8014D820 *p; + s32 dx; + s32 dz; + s32 ex; + s32 ez; + s32 r1; + s32 r2; + s32 r3; + s32 ang; + s32 x0; + s32 y0; + s32 z0; + s32 tx; + s32 tz; + s32 ty; + s32 r; + s32 t; + s32 u; + s32 a0v; +__asm__ __volatile__("" : "=r"(a2) : "0"(a2x)); + t = a2[0]; + u = a1[0]; + dx = t - u; +__asm__ __volatile__("" : "=r"(a0v) : "0"(a0)); + new_var3 = (s16) dx; + t = a2[2]; + u = a1[2]; + dz = t - u; + if (((s16) (dx | dz)) == 0) + { + goto fail; + } + desc.x = dx; + desc.y = a2[1] - a1[1]; + desc.z = a2[2] - a1[2]; + ent = *((Ent_8014D820 **) (a0v + 0x170)); + if (ent->f0 == 0) + { + goto fail; + } + if ((ent->f5C & 0x1000) == 0) + { + goto fail; + } + if (ent->f58 == 0) + { + goto fail; + } + if (((s32 (*)(s32, s32, s32)) func_80135A4C)(ent->f20, ent->f58, (s32) a1) == 0) + { + goto fail; + } + ex = ent->x - (*((u16 *) (a0v + 6))); + ez = ent->z - (*((u16 *) (a0v + 0xE))); + r1 = (s16) ratan2((s16) dz, new_var3); + r2 = (s16) ratan2((s16) ez, (s16) ex); + r3 = (s16) func_80012A60(r1, r2); + if (0x400 <= r3) + { + goto fail; + } + desc.f20 = 0; + desc.f1C = 0; + desc.f18 = 0; + x0 = ent->x; + pos.x = x0; + y0 = ent->y; + pos.y = y0; + z0 = ent->z; + tx = x0 + desc.x; + pos.z = z0; + tz = z0 + desc.z; + desc.x = tx; + desc.z = tz; + ty = (y0 + desc.y) + 8; + desc.y = ty; + if (currentLocationId != 0x3008) + { + for (p = (Ent_8014D820 *) D_801202A0; p < (Ent_8014D820 *) (D_801202A0 + 0x6480); p++) + { + if (p == ent) + { + continue; + } + if (p->f0 == 0) + { + continue; + } + if (p->f5C == 0) + { + continue; + } + if (p->f58 == 0) + { + continue; + } + func_80135888(p->f20, p->f58, (s32) (&pos), (s32) (&desc)); + } + + } + else + { + ang = ratan2(((s16) x0) - ((s16) tx), ((s16) z0) - ((s16) tz)) & 0xFFF; + func_800139C8(ang, D_8018585C, &out[0]); + func_800139C8((s16) (ang - 0x155), D_8018585C, &out[1]); + func_800139C8((s16) (ang + 0x155), D_8018585C, &out[2]); + out[0].x += pos.x; + out[0].y = pos.y; + out[0].z += pos.z; + out[1].x += pos.x; + out[1].y = pos.y; + out[1].z += pos.z; + out[2].x += pos.x; + out[2].y = pos.y; + out[2].z += pos.z; + for (p = (Ent_8014D820 *) D_801202A0; p < (Ent_8014D820 *) (D_801202A0 + 0x6480); p++) + { + if (p == ent) + { + continue; + } + if (p->f0 == 0) + { + continue; + } + if (p->f5C == 0) + { + continue; + } + if (p->f58 == 0) + { + continue; + } + if (func_8014DCE0((s32) p, (s32) (&pos), (s32) (&out[0])) != 0) + { + __builtin_memcpy((void *) ((s32) (&desc)), (void *) ((s32) (&pos)), 8); + } + } + + } + r = func_80133784(0, &pos, (s32) (&desc)); + if ((r == 0) || ((r == 0x2000) && (((*(u16 *) D_801152A8) | ((u16) D_801152AC)) == 0))) + { + ent->x = desc.x - desc.f18; + ent->y = desc.y; + ent->z = desc.z - desc.f20; + desc.x -= pos.x; + desc.y -= pos.y; + desc.z -= pos.z; + *((u16 *) (a0v + 6)) = a1[0] + desc.x; + new_var2 = desc.y; + new_var2 = new_var2 + 0x10; + *((u16 *) (a0v + 0xA)) = a1[1] + new_var2; + *((u16 *) (a0v + 0xE)) = a1[2] + desc.z; + } + else + { + *((u16 *) (a0v + 6)) = a1[0]; + *((u16 *) (a0v + 0xA)) = a1[1] + 0x10; + *((u16 *) (a0v + 0xE)) = a1[2]; + } + return 1; + fail: + *((s32 *) (a0v + 0x170)) = 0; + + return 0; +} + + +DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ + + +DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ + + + +extern void func_8014DF94(s32); + +void func_8014DF3C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014DF94\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ + + +DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ + + +DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014e284 (src/shared) */ + + + +extern void func_8014E48C(s32); + +void func_8014E434(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014E48C\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ + + +DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ + + +extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); +extern s32 func_8014D2A0(s32 arg0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +// +// The return type is LOAD-BEARING here (see DECAY note below), so `void` is not an option. +// Fix = the §37/§124 ASM-LABEL ALIAS, the same lever that banked func_8014C4AC today +// (.run/sweep/*/func_8014C4AC.c): define the body under the C name aF8014E5B4 carrying +// __asm__("func_8014E5B4"). The emitted symbol is unchanged, the C identifier never collides +// with the macro's extern, and NO tracked header edit is needed — the engine_core.h:13392 +// §85 return-axis widen described in the old banking note is now UNNECESSARY. +// Byte-checked: match_one MATCH (0 mismatches) before and after the rename. +// The alias line MUST travel with the body to every sibling overlay. +// +// DECAY FIX (2026-08-01, REDRAFT lane) — why the return type cannot be `void`: with `void`, +// gcc-2.7.2 drops the value axis entirely: no `addiu $v0,$zero,0x1`, no `addu $v0,$zero,$zero` +// at .L8014E674, and the `j .L8014E678` merge disappears (the taken path falls straight into +// the shared epilogue), which also frees $v0 so the last `lhu` lands in $v0 instead of the +// target's $v1. `s32` fixes all 23 mismatches at once. +// +// Keys (same D_801202A0 96-entry / stride-0x10C sweep as the func_8014CF04 and func_8014D2A0 +// siblings, so most of it is the already-banked idiom): +// +// (1) LOOP-BOUND DUALITY, register-relative BOTH ends (differs from func_8014CF04!). The +// target computes `addiu $v1,$s1,0x6480` for the ENTRY guard and then a separate +// `addu $s5,$v1,$zero` AFTER the guard branch for the loop-carried bound. That extra +// copy is 1 whole instruction: the plain `e = p + 0x6480; if (p < e)` spelling folds it +// away and compiles to 58 ins. The spelling that reproduces it is +// `if (p < p + 0x6480) { e = p + 0x6480; ... }` +// — the guard makes $v1, CSE turns the in-body `e = p + 0x6480` into a copy of it, and +// regalloc does not coalesce (gcc-2.7.2 has no coalescing, regalloc.md K8). The back edge +// then uses the register ($s5), NOT a rematerialised %hi/%lo(D_80126720) as in +// func_8014CF04 — so do NOT reuse that sibling's absolute-bound half here. +// +// (2) TWO INDUCTION VARIABLES, secondary base +0xE. `q = p + 0xE` carries every access except +// the two that use the entry pointer itself (`*(u16 *)p` and `*(u8 **)(a0+0x17C) = p`): +// offsets -0x8 / 0x0 / 0x12 / 0x4A / 0x4E off q == 0x6 / 0xE / 0x20 / 0x58 / 0x5C off p. +// A single-pointer spelling is NOT equivalent: gcc emits ONE base and the function comes +// out 56 ins (verified). The negative displacement is the tell that the second pointer is +// in the source, not a compiler-made giv. +// +// (3) REGISTER PINS ($16/$17) — the one non-obvious lever, and it is a genuine density +// knife-edge (regalloc.md K2 / §RC-15). Unpinned, the .lreg reads +// p: 9 refs / 24 insns -> floor_log2(9)*9/24 = 1.125 +// q: 8 refs / 22 insns -> floor_log2(8)*8/22 = 1.091 +// so p wins $s0 by ~3% and the whole function comes out with p/q SWAPPED (17 mismatches, +// every one of them a bare $s0<->$s1 rename). The target wants q in $s0. Decl-order swap +// does nothing (ties are not what decides it — p genuinely out-scores q). Rather than +// hunt a +1-ref anchor (§RC-11 `#APP` would sit next to three delay slots that maspsx +// fills: the `beqz $a1` slot, the `jal` slot and the `bnez` slot), pin both: +// register u8 *p __asm__("$17"); register u8 *q __asm__("$16"); +// Both are callee-saved, so the live-across-`jal` range is §42e/§74-safe by construction +// (the ov_SC03_099 func_8014D820 caveat only applies to caller-saved pins). Everything +// else falls out naturally: a0->$s2, a1->$s3, a2->$s4, e->$s5. +// +// (4) `t = *(s32 *)(q + 0x4A)` is loaded ONCE and reused as arg1 of func_80135888 — that is +// why `lw $a1, 0x4A($s0)` sits at the zero-test rather than at the call. +// +// The func_80135888 decl below is byte-compatible with the one this TU already carries at +// ov_SC01_077_after.c:2303, so it is not a second conflict axis. + +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); + +/* §37/§124 asm-label alias: the fleet canon declares this `extern void` (engine_core.h:13392, + * inside DEFINE_func_8014E48C()); the byte-true body must return s32. Aliasing the C name + * sidesteps the RETURN-axis conflict with no header edit. This line MUST travel with the body. */ +s32 aF8014E5B4(s32 a0, void *a1, void *a2) __asm__("func_8014E5B4"); + +DEFINE_func_8014E5B4() /* dedup: shared engine-core @0x8014E5B4 (src/shared) */ + + + +extern void func_8014E6F8(struct SubE6F8*); + +void func_8014E6A0(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014E6F8\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ + + +DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ + + +DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ + + + + +void func_8014E934(s32 _arg0) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014E98C\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ + + +DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ + + +extern int D_801C8540; +extern s32 func_8014ED80(struct SubED80*); + +void func_8014ED28(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014ED80\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ + + +DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ + + + +extern s32 func_8014F24C(struct SubF24C*); + +void func_8014F1F4(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F24C\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ + + +DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ + + +DEFINE_func_8014F3E8() /* dedup: shared engine-core @0x8014f3e8 (src/shared) */ + + +extern int D_801C8544; +extern s32 func_8014F4C0(s32); + +s32 func_8014F468(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F4C0\n" + "lui $at, %%hi(D_801C8544)\n" + "sw $v0, %%lo(D_801C8544)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8544)\n" + "lw $v0, %%lo(D_801C8544)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014F4C0() /* dedup: shared engine-core @0x8014f4c0 (src/shared) */ + + +extern int D_801C8544; +extern int func_8014F74C(); + +int func_8014F6F4(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F74C\n" + "lui $at, %%hi(D_801C8544)\n" + "sw $v0, %%lo(D_801C8544)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8544)\n" + "lw $v0, %%lo(D_801C8544)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ + + + +// @class: other +// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_801C8544; maspsx auto-fills jal delay slot) + +extern s32 func_8014FA70(s32 a0); + +void func_8014FA04(s32 a0) +{ + + extern s32 D_801C8544; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "sw $ra, 16($sp)\n" + "lw $v0, 68($a0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 1f\n" + "addu $v0, $zero, $zero\n" + "lui $a1, 0x1f80\n" + "ori $a1, $a1, 0x03fc\n" + "addu $t0, $a1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "lui $at, %%hi(D_801C8544)\n" + "sw $v0, %%lo(D_801C8544)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8544)\n" + "lw $v0, %%lo(D_801C8544)($v0)\n" + "1:\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ + + + +extern s32 func_8014FC18(u8*); + +void func_8014FBC0(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FC18\n" + "lui $at, %%hi(D_801C8544)\n" + "sw $v0, %%lo(D_801C8544)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8544)\n" + "lw $v0, %%lo(D_801C8544)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ + + + +extern int func_8014FD54(int); + +void func_8014FCFC(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FD54\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ + + +DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ + + + +DEFINE_func_8014FE60() /* dedup: shared engine-core @0x8014FE60 (src/shared) */ + + +DEFINE_func_8014FFDC() /* dedup: shared engine-core @0x8014ffdc (src/shared) */ + + +DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ + + +DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ + + +DEFINE_func_801502EC() /* dedup: shared engine-core @0x801502ec (src/shared) */ + + +DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ + + + + +extern void func_801504D8(u16 *a0); + +s32 func_80150480(s32 _arg0) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_801504D8\n" + "lui $at, %%hi(D_801C8540)\n" + "sw $v0, %%lo(D_801C8540)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_801C8540)\n" + "lw $v0, %%lo(D_801C8540)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ + + +DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ + + +DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ + + +extern void func_80147324(s32 a0); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); + + + +s32 func_801506A4(s32 arg0, s32 arg1) { + + extern u16 aD80078EB4 __asm__("D_80078EB4"); + extern void func_80150820(s32, s32); + extern void func_8015086C(int); + extern unsigned short D_8018586C[]; + extern unsigned short D_80185874[]; + extern unsigned short D_8018587C[]; + + int mode; + + mode = ((struct Ent_801506A4 *)arg1)->unk0; + ((struct Ent_801506A4 *)arg1)->unk5C |= 1; + switch (mode) { + case 0x31: + ((void(*)(int))func_80147324)(0x452); + ((void(*)(int, unsigned))func_8014ADA8)(((int)arg0), D_8018586C[((struct Ent_801506A4 *)arg1)->unk70]); + ((void(*)(int, int, unsigned))func_8014ACE8)(((int)arg0), 3, D_8018586C[((struct Ent_801506A4 *)arg1)->unk70]); + break; + case 0x32: + if ((*(unsigned short*)&aD80078EB4) != 0) { + ((void(*)(int))func_80147324)(0x452); + ((void(*)(int, unsigned, int))func_8014BB24)(((int)arg0), D_80185874[((struct Ent_801506A4 *)arg1)->unk70], 1); + ((void(*)(int, int, unsigned))func_8014ACE8)(((int)arg0), 2, D_80185874[((struct Ent_801506A4 *)arg1)->unk70]); + } + break; + case 0x33: + ((void(*)(int))func_80147324)(0x452); + ((void (*)(int, unsigned))func_80150820)(((int)arg0), D_8018587C[((struct Ent_801506A4 *)arg1)->unk70]); + break; + case 0xC5: + case 0x27B: + ((void(*)(int))func_80147324)(0x452); + func_8015086C(((int)arg0)); + break; + } +} + + +DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ + + +DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ + + +DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ + + +DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ + + + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_8015094C; + +extern s32 func_80021174(s32 a0, s32 a1); + +s32 func_8015094C(s32 param_1) { + + extern S16 D_801C7B94; + extern s32 D_80185884; + extern s32 D_80126990; + extern s32 D_80126994; + extern u8 D_80126948[]; + struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ + S16 local; /* 0x10 @ 0x40 */ + s32 pad1[4]; /* 0x10 @ 0x50 */ + register u8 *cam __asm__("$17") = D_80126948; + s32 ret; + + local = D_801C7B94; + arg.x = *(short *)(param_1 + 6); + arg.mid = D_80126994; + arg.y = *(short *)(param_1 + 0xe); + ret = func_80021174(D_80185884, (s32)&arg); + if (ret == 0) { + { + short cur = *(short *)(param_1 + 6); + s32 diff = D_80126990 - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + { + short cur = *(short *)(param_1 + 0xe); + s32 diff = *(s32 *)(cam + 0x50) - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + (void)&pad1; + return 1; + } + return 0; +} + + + +extern s32 func_8014FA70(s32 a0); +extern void func_80015978(s32 a0, s32 *a1); + +void func_80150A70(s32 a0) +{ + + extern s32 D_801C8544; + __asm__ __volatile__( + ".set\tnoreorder\n" + "addiu $sp, $sp, -24\n" + "sw $s0, 16($sp)\n" + "addu $s0, $a0, $zero\n" + "sw $ra, 20($sp)\n" + "lh $v1, 6($s0)\n" + "lh $v0, 136($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 10($s0)\n" + "lh $v0, 138($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 14($s0)\n" + "lh $v0, 140($s0)\n" + "nop\n" + "beq $v1, $v0, 3f\n" + "nop\n" + "1:\n" + "lw $v0, 68($s0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 2f\n" + "addiu $a0, $s0, 4\n" + "lui $a2, 0x1f80\n" + "ori $a2, $a2, 0x03fc\n" + "addu $t0, $a2, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "addu $a0, $s0, $zero\n" + "lui $at, %%hi(D_801C8544)\n" + "sw $v0, %%lo(D_801C8544)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "addiu $a0, $s0, 4\n" + "2:\n" + "jal func_80015978\n" + "addiu $a1, $s0, 136\n" + "3:\n" + "lw $ra, 20($sp)\n" + "lw $s0, 16($sp)\n" + "addiu $sp, $sp, 24\n" + ".set\treorder\n" + : : : "memory"); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) + + +void func_80150B28(int param_1) { + + extern s32 D_800AE6B0; + extern void (*D_80185888[])(void); + u32 idx; + register u32 sub __asm__("$2"); + + if ((D_800AE6B0 & 0x80FFFFFF) == 0) { + idx = *(u16 *)(param_1 + 0x16C); + if (idx != 0 && idx < 0x26) { + sub = idx - 1; + D_80185888[sub](); + } + } + *(u16 *)(param_1 + 0x16C) = 0; +} + + +void func_80150B9C(void) { +} + +DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ + + +DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ + + +DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ + + +DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ + + +DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ + + +DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ + + +DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ + + +DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ + + +DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ + + +DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ + + +DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ + + +DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ + + +DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ + + +DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ + + +DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ + + +DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ + + +DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ + + +DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ + + +DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ + + +DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ + + +DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ + + +void func_80150F78(void) { +} + +DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ + + +DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ + + +DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ + + +DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ + + +DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ + + +DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ + + +DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ + + +void func_801510B8(void) { +} + +void func_801510C0(void) { +} + +DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ + + +DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ + + +DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ + + +void func_80151130(void) { +} + +DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ + + +DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ + + +DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ + + +DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ + + +DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ + + +DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ + + +DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ + + +DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ + + +DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ + + +DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ + + + +/* func_80151664 — INTEGRATE lane. + * Fleet canon (src/shared/engine_core.h:2924, inside DEFINE_func_8015410C()) declares + * extern void func_80151664(void); + * so a `void func_80151664(s32 a0)` definition is `conflicting types` in every TU that + * expands that macro (ov_SC01_077_after.c:3910 does). Cookbook §73 PARAMS axis / §42: + * keep the canonical (void) signature and read the incoming argument through a $a0 pin. + * The decl below is reproduced verbatim so this file compiles the real conflict. */ +extern void func_80151664(void); + +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801470AC(s32 *a0); +extern void func_801472B4(void *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80153C18(); /* fleet canon: K&R empty prototype (engine_core.h:75, :1682 defines it (void)); + * a prototyped (s32) decl is `conflicting types` in this TU. Arg still + * passes in $a0 under default promotions -> codegen unchanged. */ + +void func_80151664(void) { + register s32 a0v __asm__("$4"); + s32 s0; + s32 v1; + + s0 = a0v; + func_80154A74(s0, 0x11); + func_801553C0(s0); + func_801470AC((s32 *)s0); + func_801472B4((void *)s0); + v1 = *(s32 *)(s0 + 0x20); + *(s16 *)(s0 + 0x3E) = 0; + *(s16 *)(s0 + 0x40) = 0; + *(s16 *)(s0 + 0x42) = 0; + *(s8 *)(s0 + 0xDD) = 0; + *(s16 *)(s0 + 0x3C) = *(u16 *)(s0 + 0x3C) & 0xFFFE; + *(s16 *)(v1 + 0x10) = 0; + *(s16 *)(s0 + 0x60) = 0x1000; + *(s16 *)(s0 + 0x62) = 0x1000; + *(s16 *)(s0 + 0x64) = 0x1000; + func_801477E8((s32 *)s0, 0); + func_80153C18(s0); +} + + +DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ + + +DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ + + +DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ + + +void func_80151878(void) { +} + +DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ + + +DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ + + +DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ + + + + +void func_80151944(void *a0) { + + extern void (*D_8018591C[])(void); + D_8018591C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ + + +DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ + + +DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ + + +DEFINE_func_80151B98() /* dedup: shared engine-core @0x80151b98 (src/shared) */ + + +DEFINE_func_80151C54() /* dedup: shared engine-core @0x80151c54 (src/shared) */ + + + + +void func_80151D24(void *a0) { + + extern void (*D_8018592C[])(void); + D_8018592C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ + + +DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ + + +DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ + + +DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ + + +DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ + + +DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ + + + + +void func_80152058(void *a0) { + + extern void (*D_80185950[])(void); + D_80185950[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); + +void func_801520DC(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_80185940; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_801472C8(arg0); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_80185940); + func_801477E8(arg0, 0x40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); + func_80147324(0x441); + func_80146CA0(arg0); +} + + +DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ + + +DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ + + +DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ + + +DEFINE_func_801522CC() /* dedup: shared engine-core @0x801522cc (src/shared) */ + + + + +void func_80152370(void *a0) { + + extern void (*D_80185964[])(void); + D_80185964[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (67 ins) + +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80019064(void *a0); +extern int func_80151204(int arg, int a1); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + + +void func_801523F4(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern s32 D_800D58AC; + extern u8 D_80185970[]; + s32 pad[4]; + s32 buf[4]; + register s32 s0a __asm__("$16"); /* $s0 = buf */ + register s32 s2a __asm__("$18") = (s32)&D_80185970; /* $s2 = &D_80185970 */ + + ((void (*)(s32, s32))func_80146E90)(arg0, 0); + func_80019064(&D_80062C04); + ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); + if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), + (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); + } else { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); + } + func_80154A74(arg0, 0x16); + ((void (*)(s32))func_80149020)(arg0); + s0a = (s32)buf; + ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, + s2a, s0a); + ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); + ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); + func_80147324(0x451); + ((void (*)(s32))func_80146CA0)(arg0); + (void)pad; +} + + +DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ + + +DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ + + + + +void func_80152698(void *a0) { + + extern void (*D_80185980[])(void); + D_80185980[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ + + +DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ + + +DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ + + + + +void func_8015282C(void *a0) { + + extern void (*D_80185998[])(void); + D_80185998[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_801528B0(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_80185988; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_80185988); + func_801477E8(arg0, 0xFFF00000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ + + +DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ + + +DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ + + +DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ + + + + +void func_80152B6C(void *a0) { + + extern void (*D_801859AC[])(void); + D_801859AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ + + +DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ + + +DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ + + +DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ + + + + +void func_80152D24(void *a0) { + + extern void (*D_801859C8[])(void); + D_801859C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_80152DA8(s32 arg0) +{ + + extern s32 D_80062C14; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_801859B8; + func_80019064(&D_80062C14); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + M2C_FIELD(arg0, s8 *, 0xDF) = 8; + func_80146DB8(arg0, &D_801859B8); + func_801477E8(arg0, 0xFFE40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ + + +DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ + + +DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ + + +DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ + + + + +void func_80153060(void *a0) { + + extern void (*D_801859DC[])(void); + D_801859DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ + + +DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ + + +DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ + + +DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ + + +DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ + + +DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ + + + + +void func_80153320(void *a0) { + + extern void (*D_801859F0[])(void); + D_801859F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ + + +DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ + + +DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ + + +DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ + + +DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ + + +DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ + + +DEFINE_func_801535F4() /* dedup: shared engine-core @0x801535F4 (src/shared) */ + + +DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ + + +DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ + + +extern void func_80015954(s32 a0, s32 a1); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern void *memcpy(void *dst, const void *src, u32 n); +s32 func_80153800(s32 a0) { + + extern void (*D_8011DB28)(s32 a0); + extern u8 D_80126DB0[]; + extern u16 D_80126DB6; + s32 s1 = a0; + s32 s0; + s32 s2; + u8 bVar1; + s16 buf1[4]; + s16 buf2[4]; + if (D_8011DB28 != 0) { + ((void (*)(s32, s32))func_80015978)(s1 + 4, s1 + 0x88); + memcpy((void *)(s1 + 0x90), (void *)(s1 + 0x88), 8); +ret0: + return 0; + } + bVar1 = *(u8 *)(s1 + 0xDE); + if (bVar1 >= 0x21) { + s32 base = (s32)D_80126DB0; + func_80015954(base, s1 + 4); + memcpy((void *)(s1 + 0x88), (void *)base, 8); + memcpy((void *)(s1 + 0x90), (void *)(s1 + 0x88), 8); + *(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = D_80126DB6; + return 0; + } + { + register s32 m __asm__("$3") = bVar1 * 4; + s2 = m; + buf2[1] = *(u16 *)(s1 + 0xA2) - m; + } + for (s0 = 0; s0 < 0x80; s0++) { + s32 ang = s0 * 0x200000; + buf1[0] = 0; + buf1[1] = 0; + buf1[2] = s2; + func_800139C8(ang >> 0x10, buf1, buf1); + buf2[0] = *(u16 *)(s1 + 0xA0) + buf1[0]; + buf2[2] = *(u16 *)(s1 + 0xA4) + buf1[2]; + if (((s32 (*)(s32, void *))func_80153978)(s1, buf2) == 0) { + goto ret0; + } + } + *(u8 *)(s1 + 0xDE) = *(u8 *)(s1 + 0xDE) + 1; + return 1; +} + + +DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ + + +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); + +typedef struct { + u16 f0, f2, f4; + s16 f6; +} Blk801539F8; + +s32 func_801539F8(s32 a0, void *a1) +{ + Blk801539F8 buf1; + Blk801539F8 buf2; + Blk801539F8 buf3; + s32 r1, r2, r3; + + buf1 = *(Blk801539F8 *)(a0 + 0xA0); + buf2 = *(Blk801539F8 *)a1; + buf1.f2 -= 4; + r1 = func_80133784(0, &buf1, (s32)&buf2); + if (r1 != 0x2000) { + return 1; + } + buf1 = buf2; + buf2.f2 += 8; + r2 = func_80133784(0, &buf1, (s32)&buf2); + if (r2 != r1) { + return 1; + } + r3 = func_80133784(2, &buf2, (s32)&buf3); + if (r3 != r2) { + return 1; + } + *(s16 *)(a0 + 0x88) = buf2.f0; + *(s16 *)(a0 + 0x8A) = buf2.f2; + *(s16 *)(a0 + 0x8C) = buf2.f4; + *(Blk801539F8 *)(a0 + 0x90) = *(Blk801539F8 *)(a0 + 0x88); + return 0; +} + + +DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ + + +DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ + + +DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ + + +DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ + + +DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ + + +DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ + + +DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ + + +DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ + + +DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ + + +DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls +extern void func_80019064(void *a0); + +void func_80153CCC(S80153CCC *a0) { + + extern s32 D_80185A04; + extern void (*D_80185A2C[])(void *a0); + extern s16 D_8011DB0C; + extern u16 D_8011F748; + ((s32 (*)(s32))func_80019064)((s32)&D_80185A04); + D_80185A2C[a0->idx](a0); + D_8011DB0C = 0; + D_8011F748 = 0; +} + + +DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (33/33) + +extern void func_80147324(s32 arg0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_80146CA0(void *a0); +extern s16 currentLocationId; + +void func_80153D7C(s32 param_1) +{ + + extern u8 D_80185A0C; + func_80147324(0x451); + func_80154274((s32 *)param_1, (s32)&D_80185A0C); + func_80149020((s32 *)param_1); + *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); + *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); + *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); + if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; + else *(u8 *)(param_1 + 0xde) = 10; + *(u8 *)(param_1 + 0xdf) = 0; + __asm__ __volatile__("" ::: "memory"); + func_80146CA0((void *)param_1); +} + + +DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ + + +DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ + + +DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ + + +DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ + + +DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ + + +DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ + + +DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ + + +DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ + + +DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ + + +DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ + + +DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ + + +DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ + + +DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ + diff --git a/src/ov_SC02_037/ov_SC02_037_o0d.c b/src/ov_SC02_037/ov_SC02_037_o0d.c new file mode 100644 index 000000000..62c8752de --- /dev/null +++ b/src/ov_SC02_037/ov_SC02_037_o0d.c @@ -0,0 +1,1109 @@ +#include "common.h" +#include "../shared/engine_core.h" + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern void func_80029444(void); +extern void func_800D1754(void); +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern s32 func_801508B4(s32); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern s32 func_8016E95C(); +extern void func_801754A8(void); +extern void func_8013BC7C(); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern int func_801288E8(int arg0); +extern int func_80128940(int arg0); +extern void func_80010AE0(s32 a0); +extern CdFileLoc cdFileLocTable[]; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s32 func_80128C98(s32 arg0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(); +extern void func_8012944C(void); +extern void func_80015B6C(s32, s16, s32, s16, s32, s32, s32, s32, s32, s32); +extern void GsSortBg(s32 *, void *, u16, s32 *); +extern void GsSortFastBg(s32 *, void *, u16, s32 *); +extern unsigned short D_800B99F0; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern s32 D_80126E60[]; +extern s8 D_801150D6; +extern s8 D_801152C0; +extern u8 D_80127504; +extern void func_800144D4(void); +extern void func_80129C40(s32 _arg0); +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern s32 D_80126F04[]; +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern s32 D_800AE688[]; +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A018(s32 a0, s32 a1); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern void func_8012A1BC(void); +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 func_80012F74(s32, s32, s32, s32); +extern void func_8012A418(void); +extern Vec8 D_80114F24; +extern void func_8012A464(void); +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s32 func_80047D3C(s32 a0); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_8012A6D0(void* a0, void* a1); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern void func_8012ACA0(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern Mat32 D_800AE620; +extern void RotMatrixX(int r, void *m); +extern void RotMatrixY(int r, void *m); +extern void RotMatrixZ(int r, void *m); +extern s32 func_8012B4B8(int param_1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern s32 func_8012B77C(s32 out, s32 a1, s32 a2); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8012C098(void *param_1); +extern s32 func_8012C0EC(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C750(s32 a0); +extern s32 func_8012C820(u8 *a0); +extern u16 D_801274E4[]; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern s32 func_8012CC88(); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012CC88(s32 a0, s32 a1, s32 a2); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(s32 arg0); +extern void func_8012E138(); +extern void func_8012DFD4(u8 *a0); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012E014(s32 a0); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_80049CAC(); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern s32 func_80135888(); +extern void func_8012E138(int model); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern void func_8012E364(s32 arg0_); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern s32 func_8016B428(s32); +extern void func_80019064(void *); +extern void func_8012E9C0(int param_1); +extern void func_8012EA90(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern s32 aF8012EFB8(); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_80015954(s32 a0, s32 a1); +extern void func_8012F274(s32 a0, s32 a1); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void func_8004914C(); +extern void func_800491AC(); +extern s32 RotTransPers(s32, s32, s32*, s32*); +extern s32 * func_8012F40C(s32 *param_1, s32 param_2); +extern s32 * func_8012F49C(s32 *param_1, s32 param_2, s32 param_3); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_8012F8C8(int param_1); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern void func_80131B14(void); +extern void func_8012FCC4(int param_1); +extern void func_8012FDA8(int param_1); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern void func_8012CBF4(s32); +extern s32 func_80131D68(s32 a0, s32 a1); +extern void func_80130650(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130A18(u8 *a0); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void func_8012CBCC(s32); +extern void func_80131E00(struct S80131E00*, s32); +extern void func_80130C08(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_80131CF4(s32 a0); +extern void func_80019064(void *a0); +extern s32 aF80131CA8(); +extern s32 aF80131CF4(); +extern int func_80131D68(int a0, int a1); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void func_80131EEC(void *a0); +extern void func_80131F28(void *a0); +extern void func_80131F64(void *a0); +extern void func_80131FA0(void *a0); +extern void func_80131FDC(void *a0); +extern void func_8001C214(int, int); +extern void func_80132018(int param_1); +extern void func_801320D0(void); +extern void func_801320D8(int param_1); +extern void func_80132144(int param_1); +extern void func_801321B0(int param_1); +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void gteMIMefunc(); +extern void func_801325B8(int dst, int src, int m0, int mm, int arg5); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_80135888(s32, s32, s32, s32); +extern void func_80132F40(s32 arg0); +extern void func_801330E0(void * param_1, s16 * param_2, s32 param_3); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_801330E0(); +extern void func_8013339C(s16 *a0, s16 *a1); +extern void func_80133298(s32 *a0); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern char D_801C841C[]; +void func_80136BC4(s32 a0); +extern void func_8013373C(s32 a0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133AB0(s16 flag, s16 x, s16 y, s32 arg3); +extern s32 func_80133CD4(); +extern s32 func_80134310(Vec3s *a0, Vec3s *a1, s32 a2); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int param_1, s16 param_2, s16 param_3, int param_4); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_801365B8(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void func_80136C54(void); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern u16 D_80126CC4; +extern M2C_UNK func_800153CC(M2C_UNK, u16, M2C_UNK, M2C_UNK, s32, s32); +extern void func_80136DFC(void); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80136F3C(s32 a0, s32 a1); +extern void func_80137030(s16 a0, s16 a1); +extern void func_80137178(s32 a0, s32 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 aF80137614(); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern void func_80139BE0(s32 a0); +extern void * aF801376E8(); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern void func_8013A860(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern s32 D_801269F0; +extern s16 D_801269F4; +extern s32 D_801269F8; +extern void func_80138BE0(s32 a0); +extern void func_80137BD8(s32 a0); +extern void func_8013A380(void); +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80137DD4(s32 ent, u8 *arg, u8 *work); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(u8 *arg0, u8 arg1, s32 arg2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void func_80138C30(void *a0); +extern void func_80139C7C(u8 *a0); +extern s32 func_8013A8FC(s32 arg0); +extern s32 func_80138C60(s32 arg0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_801395D4(void * a0); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013DBE4(); +extern void func_8013D9B0(); +extern void func_8013D330(void); +extern void func_8013D178(void); +extern void func_8013CF68(void); +extern void func_8013CB84(void); +extern void func_8013CF68(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D53C(void *); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_8013D53C(void *arg0v); +extern void func_800599B8(u16*); +extern void func_8013D9B0(int param_1); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EF88(); +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern s16 D_8011512A; +extern u16 D_8011512E; +extern u8 D_80115140[]; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical redecl (§8e) */ +extern u8 D_8011515C; /* macro-canonical redecl (§8e) */ +extern u8 D_80184CA8[]; +extern u8 D_80184CC0[]; +extern u16 D_80184BC4[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical redecl (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +extern short D_80115128; +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +extern s32 func_8014032C(s32 param_1, s32 param_2); +extern u8 D_80115148[]; +extern u8 D_80062BDC; +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern s32 *func_80140D68(s32 *, Prim4 *, s32, s32, s32); +extern s32 * func_80140958(); +extern s32 * func_80140D68(); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern int func_80029FE4(void); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); +extern int func_80141100(int param_1); +extern Prim_1412A8 * aF801412A8(); +extern void func_800291A0(s32, s32); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_801415C0(s32 param_1, s32 param_2); +extern u8 D_80115149[]; +extern u8 D_80115158[]; +extern u8 D_8011514D; +extern u8 D_8011515C; +extern s32 func_800D11F0(s32 a0); +extern s32 func_800D1658(s32 a0); +extern s32 func_801416D4(s16 param_1); +extern void func_8001903C(void); +extern void func_801417C4(void); +extern u8 D_800B9A16; +extern u16 D_80115114; +extern void func_801417F8(void); +extern void func_800D24A0(int); +extern void func_8002D4C8(int, int); +extern void func_80141C0C(int); +extern s32 func_801418F8(void); +extern s32 func_80141A60(); +extern void func_8013FAF8(s16, s16); +extern s32 D_801151D0; +extern u16 D_80115116; +extern void func_80141B90(void); +extern u16 D_80184F60[]; +extern s32 func_80015144(void); +extern unsigned char D_80112C04[]; +extern unsigned char D_80112C50[]; +extern unsigned char D_80112C9C[]; +extern unsigned char D_80112CE8[]; +extern unsigned char D_80112D38[]; +extern unsigned char D_80112D78[]; +extern unsigned char D_80112DBC[]; +extern unsigned char D_80112DF4[]; +extern unsigned char D_80112E14[]; +extern unsigned char D_80112E40[]; +extern unsigned char D_80112E6C[]; +extern unsigned char D_80112EBC[]; +extern unsigned char D_80112F0C[]; +extern unsigned char D_80112F48[]; +extern unsigned char D_80112F9C[]; +extern unsigned char D_80112FDC[]; +extern unsigned char D_8011302C[]; +extern unsigned char D_80113074[]; +extern unsigned char D_801130B8[]; +extern unsigned char D_801130E8[]; +extern unsigned char D_80113138[]; +extern unsigned char D_8011317C[]; +extern unsigned char D_801131A8[]; +extern unsigned char D_801131E8[]; +extern unsigned char D_80113214[]; +extern unsigned char D_80113254[]; +extern unsigned char D_80113278[]; +extern unsigned char D_801132B8[]; +extern unsigned char D_801132E4[]; +extern unsigned char D_80113324[]; +extern unsigned char D_80113360[]; +extern unsigned char D_801133A4[]; +extern unsigned char D_801133F4[]; +extern unsigned char D_80113440[]; +extern unsigned char D_80113474[]; +extern unsigned char D_801134B0[]; +extern unsigned char D_801134FC[]; +extern unsigned char D_80113530[]; +extern unsigned char D_80113554[]; +extern unsigned char D_801135A8[]; +extern unsigned char D_80113600[]; +extern unsigned char D_80113650[]; +extern unsigned char D_80113694[]; +extern unsigned char D_801136DC[]; +extern unsigned char D_80113724[]; +extern unsigned char D_80113744[]; +extern unsigned char D_80113770[]; +extern unsigned char D_80113794[]; +extern unsigned char D_801137D8[]; +extern unsigned char D_8011381C[]; +extern unsigned char D_8011383C[]; +extern unsigned char D_8011386C[]; +extern unsigned char D_801138A4[]; +extern unsigned char D_801138D0[]; +extern unsigned char D_80113900[]; +extern unsigned char D_80113944[]; +extern unsigned char D_80113964[]; +extern unsigned char D_8011399C[]; +extern unsigned char D_801139E8[]; +extern unsigned char D_80113A28[]; +extern unsigned char D_80113A50[]; +extern unsigned char D_80113A84[]; +extern unsigned char D_80113AB0[]; +extern unsigned char D_80113AE0[]; +extern unsigned char D_80113B34[]; +extern unsigned char D_80113B68[]; +extern unsigned char D_80113BA4[]; +extern unsigned char D_80113BC0[]; +extern unsigned char D_80113BF0[]; +extern unsigned char D_80113C20[]; +extern unsigned char D_80113C3C[]; +extern unsigned char D_80113C7C[]; +extern unsigned char * func_80141CA4(void); +extern void func_80142414(s32 a0, s16 a1); +extern void func_80142454(s32 a0); +extern void func_801424E4(short *param_1); +extern void func_801425CC(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern s32 func_8012AD50(void *a0); +extern void func_80142608(s32 param_1); +extern void func_801426D4(s32 a0); +extern void func_80142740(int param_1); +extern void func_80142778(u8 *a1); +extern void func_801427DC(void); +extern void func_801427E4(void); +extern void func_801427EC(int param_1); +extern s32 func_80142DB8(s32 *a0); +extern void func_80142BB4(s32 *a0, s32 a1, s32 a2); +extern void func_80142C9C(s32 *a0); +extern void func_80142838(s32 *a0); +extern s32 func_80142D38(s32 *a0); +extern void func_801428CC(s32 *a0); +extern void func_8014292C(int param_1); +extern void func_80142978(int param_1); +extern void func_801429C4(int param_1); +extern void func_80142A80(void); +extern void func_80142A10(int param_1); +extern void func_80142C84(s32 a0); +extern void func_80143994(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); +void func_801439C0(u8 *a0); +void func_8012AD44(s32 *a0, s16 a1); +void func_8012C218(void *a0); +void func_8012C098(void *param_1); +extern void func_80142BB4(s32* param_1, s32 param_2, s32 param_3); +extern void func_80142C7C(void); +extern void func_80142C9C(s32 * arg0); +extern void func_80142DC4(int param_1); +extern void func_80142E38(int param_1); +extern void func_80142EC0(s32 param_1); +extern void func_80142F68(s32 *a0); +extern void func_80142FFC(s32 *a0); +extern void func_8014305C(int param_1); +extern void func_801430F4(s32 *a0); +extern void func_80143188(s32 *a0); +extern int func_8001CA88(int, void *); +extern void func_800233CC(void *, unsigned short); +extern void func_801431E8(s32 param_1); +extern void func_801432FC(s32 *a0); +extern void func_80143390(s32 *a0); +extern void func_80143458(); +extern void func_801433F0(s32 a0); +extern void func_80143458(s32 param_1); +extern void func_8014358C(); +extern void func_8014350C(s32 *a0); +extern void func_8014358C(s32 param_1); +extern s32 rand(void); +extern void func_80143640(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801437D8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80143970(s32 a0); +extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); +extern void func_801439C0(u8 *a0); +extern s16 D_801152AC; +extern s16 D_801152AA; +extern void func_801439FC(s32 a0); +extern void func_80143B30(void *a0); +extern s32 func_80143B6C(s32 arg0, s32 arg1); +extern void func_80143BDC(u16 *a0); +extern void func_80143C38(void *a0); +extern void func_80143C74(s32 a0, s32 a1); +extern void func_80143C98(void *a0); +extern void ApplyMatrixSV(void*, Svec_801372B0*, Svec_801372B0*); +extern void func_80143D28(s32 param_1); +extern void func_80143E68(void *a0); +extern void func_80143EA4(void); +extern void func_80143EAC(void); +extern void func_80143EB4(void); +extern void func_80143EBC(s32 a0); +extern void func_80144054(void *a0); +extern void func_80144090(s32 param_1); +extern void func_801442F8(int param_1); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80144364(int param_1); +extern void func_80144458(void *arg0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern void func_80144558(u8 *param_1); +extern void func_8014462C(u8 *a0); +extern void func_801446A4(int param_1); +extern void func_8014477C(void *param_1); +extern void func_80144880(s32 param_1); +extern void func_80144988(s32 a0); +extern void func_801449C8(void *a0); +extern void func_80144A04(s32 *a0); +extern void func_80144A2C(void *a0); +extern void func_80144A68(s32 *a0); +extern void func_80144A90(void); +extern void func_80144A98(u8 *a0); +extern int func_80144B14(int param_1); +extern void func_80144AEC(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern int func_80144B14(int param_s0); +/* ==== end §8b carried decl layer ==== */ + + +INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0d", func_80144B9C); + +INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0d", func_801457A4); diff --git a/src/ov_SC03_107/ov_SC03_107_jr_8013F350.c b/src/ov_SC03_107/ov_SC03_107_jr_8013F350.c index 2c75a252c..ab0bcf046 100644 --- a/src/ov_SC03_107/ov_SC03_107_jr_8013F350.c +++ b/src/ov_SC03_107/ov_SC03_107_jr_8013F350.c @@ -3301,3871 +3301,3 @@ DEFINE_func_80144AEC() /* dedup: shared engine-core @0x80144aec (src/shared) */ DEFINE_func_80144B14() /* dedup: shared engine-core @0x80144B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_80144B9C); - -INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_801457A4); - -void func_801458E0(void) { -} - -DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_801849E0 block defeats the tail-merge of the two identical D_801849E0 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145934(void) { - - extern u8 D_801849E0; - extern u8 D_80184950; - extern u8 D_8018492C; - extern u8 D_80184908; - extern u8 D_801849BC; - extern u8 D_80184998; - extern u8 D_80184974; - extern u8 D_801848E4; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_801849E0; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_801849E0 load from being - * tail-merged with the v>=0x384 D_801849E0 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_80184950; - } else if (v >= 0x578) { - p = &D_8018492C; - } else if (v >= 0x514) { - p = &D_80184908; - } else if (v >= 0x384) { - p = &D_801849E0; - } else if (v >= 0x258) { - p = &D_801849BC; - } else if (v >= 0xC8) { - p = &D_80184998; - } else if (v >= 0xA) { - p = &D_80184974; - } else { - p = &D_801848E4; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - - -// @class: schedule -// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80184A70 block defeats the tail-merge of the two identical D_80184A70 loads; barrier emits zero bytes, load-bearing) - -extern s32 func_80029504(void); -extern void func_800D185C(u8 *a0); -extern void func_80145B24(void); - - -void func_80145A2C(void) { - - extern u8 D_80184A70; - extern u8 D_80184950; - extern u8 D_8018492C; - extern u8 D_80184908; - extern u8 D_80184A4C; - extern u8 D_80184A28; - extern u8 D_80184A04; - extern u8 D_801848E4; - s32 v; - void *p; - - v = func_80029504(); - if (v >= 0x6A4) { - p = &D_80184A70; - /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80184A70 load from being - * tail-merged with the v>=0x384 D_80184A70 load below (emits zero machine code). */ - __asm__ __volatile__("" ::: "memory"); - } else if (v >= 0x5DC) { - p = &D_80184950; - } else if (v >= 0x578) { - p = &D_8018492C; - } else if (v >= 0x514) { - p = &D_80184908; - } else if (v >= 0x384) { - p = &D_80184A70; - } else if (v >= 0x258) { - p = &D_80184A4C; - } else if (v >= 0xC8) { - p = &D_80184A28; - } else if (v >= 0xA) { - p = &D_80184A04; - } else { - p = &D_801848E4; - } - ((void (*)(void *))func_800D185C)(p); - func_80145B24(); -} - - -DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ - - -DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ - - -DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ - - - - -void func_80145CEC(void) { - extern int func_8001C320(); - extern s32 func_80029504(void); - extern int func_801552F4(); - extern int func_80147084(); - extern int func_80147098(); - extern int func_801470AC(); - extern int func_80149210(); - extern int func_8014BE9C(); - extern int func_8016533C(); - extern int func_801627C0(); - extern int func_80162AF4(); - extern int func_80165C78(); - extern int func_801468C8(); - extern int func_80145EE8(); - extern int func_8014C968(); - extern int func_8014C6D0(); - extern int func_80165938(); - extern int func_80153C8C(); - extern int func_800290BC(); - extern s32 D_800AFAE8; - extern s32 D_800DE2A4; - extern s32 D_801152C8; - extern s32 D_80183E58; - extern s32 * D_80126B78[1]; - extern s32 * D_800AF7C8; - extern s32 * D_80126B90; - extern s16 D_80126BB8; - extern s16 D_80126BBA; - extern s16 D_80126BBC; - extern s16 D_80126BC0; - extern s16 D_80126BC2; - extern s16 D_80126BC4; - extern s16 D_80126BC8; - extern s16 D_80126BCA; - extern s16 D_80126BCC; - extern s16 D_80126D10; - extern s16 D_80126D12; - extern s16 D_80126C4E; - extern s16 currentLocationId; - extern s32 D_8011F9C4; - extern s32 D_8012707C; - extern s32 D_8011DB10; - extern s32 D_80126B58; - - unsigned int uVar1; - s32 pad[2]; - (void)&pad; - - func_80016714(&D_80126B58, 0x254); - D_80126B78[0] = (s32 *)&D_800AFAE8; - D_800AF7C8 = (s32 *)&D_801152C8; - func_8001C320(&D_800AFAE8, &D_800DE2A4); - *(s32 *)((s32)D_80126B78[0] + 0x28) = 0x7fff7fff; - D_80126B90 = (s32 *)&D_80183E58; - *(u16 *)((s32)D_80126B78[0] + 0x18) = 0x1000; - D_80126BC8 = 0x1000; - D_80126BC0 = 0x1000; - D_80126BB8 = 0x1000; - *(u16 *)((s32)D_80126B78[0] + 0x1a) = 0x1000; - D_80126BCA = 0x1000; - D_80126BC2 = 0x1000; - D_80126BBA = 0x1000; - *(u16 *)((s32)D_80126B78[0] + 0x1c) = 0x1000; - D_80126BCC = 0x1000; - D_80126BC4 = 0x1000; - D_80126BBC = 0x1000; - D_80126D12 = 0x1000; - D_80126D10 = 0x1000; - D_80126C4E = 0x1000; - func_801552F4(&D_80126B58); - func_80147084(&D_80126B58); - func_80147098(&D_80126B58); - func_801470AC(&D_80126B58); - *(u16 *)((s32)D_80126B78[0] + 0x2c) = *(u16 *)((s32)D_80126B78[0] + 0x2c) | 0x50; - func_80149210(&D_80126B58, 8); - func_8014BE9C(); - func_8016533C(); - func_801627C0(); - func_80162AF4(); - func_80165C78(); - func_801468C8(&D_80126B58, 1); - if (currentLocationId != 0x30a2 && currentLocationId != 0x30a5) { - func_80145EE8(0); - } - func_8014C968(); - func_8014C6D0(); - D_8011F9C4 = 0; - func_80165938(); - func_80153C8C(); - D_8012707C = 0; - D_8011DB10 = 0; - uVar1 = ((int (*)())func_80029504)(); - if (uVar1 >= 10) { - func_800290BC(); - } -} - - - - -// @class: schedule -// @stuck: branch layout — 3-way dispatch on param_1; trying switch form - -extern s32 func_80029178(s32 arg); -extern void func_80146014(s32 a0); - - -void func_80145EE8(s32 param_1) -{ - - extern unsigned char D_80183E68[]; - extern unsigned char D_80183E98[]; - extern unsigned char D_80183EE8[]; - extern unsigned char D_80183F18[]; - extern unsigned char D_80183F48[]; - switch (param_1) { - case 0: - if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { - ((void (*)(void *))func_80146014)(D_80183E68); - } - if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { - ((void (*)(void *))func_80146014)(D_80183E98); - } - if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { - ((void (*)(void *))func_80146014)(D_80183EE8); - } - if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { - ((void (*)(void *))func_80146014)(D_80183F18); - } - if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { - return; - } - ((void (*)(void *))func_80146014)(D_80183F48); - break; - case 1: - ((void (*)(void *))func_80146014)(D_80183E68); - ((void (*)(void *))func_80146014)(D_80183E98); - ((void (*)(void *))func_80146014)(D_80183EE8); - ((void (*)(void *))func_80146014)(D_80183F18); - ((void (*)(void *))func_80146014)(D_80183F48); - break; - } -} - - -DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ - - -void func_80146074(void) { -} - - -extern s32 func_80146128(void); -extern void func_80146360(void); -extern void func_801463A0(); - -void func_8014607C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146128\n" - "lui $at, %%hi(D_8019A898)\n" - "sw $v0, %%lo(D_8019A898)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A898)\n" - "lw $v0, %%lo(D_8019A898)($v0)\n" - "nop\n" - "beqz $v0, .L80146114\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_80146360\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "addu $t0, $v1, $zero\n" - "sw $sp, 0($t0)\n" - "addiu $t0, $t0, -4\n" - "addu $sp, $t0, $zero\n" - "jal func_801463A0\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - ".L80146114:\n" - "nop\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -extern void *memcpy(void *dst, const void *src, u32 n); -extern void func_80146FC4(s32 a0); -extern void func_80150A70(s32 a0); -extern void func_80147098(s32 *a0); -extern void func_8014A638(s32 arg0); -extern s32 func_80155458(s32 a0); -extern s32 func_80029104(void); -extern void func_80029344(void); -extern void func_8014ADE0(s32 a0); -extern void func_8014B350(s32 a0); -extern void func_8014B7A4(s16 *param_1); -extern s32 func_80161D58(s32 a0); -extern void func_80161A90(s32 a0); -extern void func_8014B504(u16 *a0); -extern void func_80149BEC(s32 a0); -extern void func_8014B5D0(s32 *a0); -extern void func_8014C99C(u8 *a0); -extern void func_8014B190(s32 s0); -extern void func_80148648(s32 a0, s32 a1); -extern s32 func_80149228(s32 a0); -extern void func_8014A59C(s32 a0); -extern void func_8016F14C(void *a0); -extern void func_80154418(void *a0); -extern void func_80154BE4(s32 a0); -extern void func_80165694(s32 arg0); -extern void func_801654A8(s32 a0); -extern void func_8014A680(s32 a0); -extern void func_8014A6A8(s32 a0); -extern void func_8014A71C(s32 a0); -extern void func_80172588(s32 *a0); -extern void func_801473DC(s32 *a0); -extern void func_80015978(s32 a0, s32 *a1); -s32 func_80146128(void) -{ - - extern s32 D_80126B58; - extern s32 *D_80126B78; - extern u8 D_80078EC1; - extern s32 D_80078EC8; - extern s32 D_80126B9C; - extern s32 D_8011F730; - extern u16 D_801152B8; - extern u16 D_8012693A; - extern u8 D_80126BE0[]; - extern u8 D_801150F0[]; - register s32 base __asm__("$16"); - register s32 *p __asm__("$17"); - p = D_80126B78; - base = (s32)&D_80126B58; - func_80146FC4(base); - memcpy((void *)D_801150F0, (void *)D_80126BE0, 8); - func_80150A70(base); - ((void (*)(s32))func_80147098)(base); - func_8014A638(base); - D_8011F730 = 0; - D_801152B8 = 0; - D_8012693A = 0; - if (D_80078EC1 == 0x10 && D_80078EC8 != 0) { - *(u16 *)((s32)p + 2) = 6; - D_80126B9C |= 0x800; - } else { - *(u16 *)((s32)p + 2) = 1; - *(s32 *)(base + 0x44) &= ~0x800; - } - if (*(s32 *)(base + 0x1B0) != 0) { - *(s32 *)(base + 0x1B0) = *(s32 *)(base + 0x1B0) - 1; - } - if (func_80155458(base) == 0 && (*(s32 *)(base + 0x44) & 0x4000000) == 0) { - if ((func_80029104() & 0xFF) != 0) { - func_8014ADE0(base); - func_8014B350(base); - ((void (*)(s32))func_8014B7A4)(base); - ((void (*)(s32))func_80161D58)(base); - } - func_80029344(); - func_80161A90(base); - ((void (*)(s32))func_8014B504)(base); - func_80149BEC(base); - ((void (*)(s32))func_8014B5D0)(base); - ((void (*)(s32))func_8014C99C)(base); - func_8014B190(base); - func_80148648(base, 0); - ((void (*)(s32))func_80149228)(base); - func_8014A59C(base); - ((void (*)(s32))func_8016F14C)(base); - ((void (*)(s32))func_80154418)(base); - func_80154BE4(base); - func_80165694(base); - func_801654A8(base); - func_8014A680(base); - func_8014A6A8(base); - func_8014A71C(base); - ((void (*)(s32))func_80172588)(base); - ((void (*)(s32))func_801473DC)(base); - ((void (*)(s32, s32))func_80015978)(base + 4, base + 0x98); - return 1; - } - ((void (*)(s32, s32))func_80015978)(base + 4, base + 0x98); - return 0; -} - - -extern u8 D_80126BA4; -extern void (*D_80183F98[])(void *); - -void func_80146360(void) -{ - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern s32 D_80126B58; - D_80183F98[D_80126BA4](&D_80126B58); -} - - - - - - - /* size 8, align 1 -> unaligned block move */ - -DEFINE_func_801463A0() /* dedup: shared engine-core @0x801463A0 (src/shared) */ - - -DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ - - -DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ - - -DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ - - -DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ - - -DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ - - -DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ - - -DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ - - -DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ - - -DEFINE_func_801466F0() /* dedup: shared engine-core @0x801466f0 (src/shared) */ - - -DEFINE_func_80146750() /* dedup: shared engine-core @0x80146750 (src/shared) */ - -DEFINE_func_8014680C() /* dedup: shared engine-core @0x8014680c (src/shared) */ - - -DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ - - -DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ - - -DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ - - -DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ - - - -extern void func_80146AFC(void*); -void aF80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6) __asm__("func_80146A6C"); -void aF80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6) -{ - u8 sp[0x18]; - *(s16 *)(sp + 0x0) = a0; - *(s32 *)(sp + 0x8) = a1; - *(s16 *)(sp + 0x2) = a2; - *(s16 *)(sp + 0x4) = a3; - *(s16 *)(sp + 0x6) = a4; - *(s32 *)(sp + 0xC) = a5; - *(s32 *)(sp + 0x10) = a6; - ((s32 (*)(void *))func_80146AFC)(sp); -} - - -DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ - - -extern s32 func_80146B9C(void * arg0); - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_80146AFC; - -/* func_80146AFC — ASCENDING twin of the byte-proven DEFINE_func_80146B9C() - * in src/shared/engine_core.h (cookbook §71: find the already-matched sibling first). - * Same 0x58-stride slot table (base D_8011D030), same 7-store copy body in the same - * order, same $a2/$a1 giv pair. 80146B9C walks DOWN; this one walks UP, so the guard - * is `p < end`, end = p + 0xA50 (30 slots x 0x58). - * - * DECAY ROOT CAUSE (this redraft): the stored backlog draft had been rewritten to - * `void func_80146AFC(...)`, which drops BOTH `return 0` paths' `addu $v0,$zero,$zero` - * and the hit path's `j .L80146B94` => LENGTH-DRIFT -2 (38 vs 40) plus $v0/$v1 regalloc - * drift on the final lw/sw pair. Restoring the s32 return type (the fleet spelling the - * banked sibling func_80146B9C already uses) restores MATCH at 40/40. - * - * RECONCILE (2026-08-01) — the whole-binary gate failed with - * ov_SC01_077_after.c:592: conflicting types for `D_8011D030' (previous decl :564) - * TWO file-scope collisions were present; both are fixed HERE, with NO edit to - * src/shared/engine_core.h and NO change to the generated code (re-verified MATCH - * after each step): - * - * 1. D_8011D030 (the reported one). DEFINE_func_801469C8() emits - * `extern s32 D_8011D030;` at FILE scope (engine_core.h:10811, above the - * `s32 func_801469C8(...) {` line), and this TU expands that macro at :564 — - - extern s32 D_8011D030; - * i.e. before the splice point :570. The draft's `extern u16` therefore - * redeclared it incompatibly at :592. Conformed to the TU's `extern s32`. - * Codegen-neutral: the sole use is `(u8 *)&D_8011D030`, an address-of, so the - * declared object type never reaches a load/store width (cookbook §20). - * - * 2. func_80146AFC ITSELF (latent, would have surfaced next). DEFINE_func_8014C010() - * (:13510) and DEFINE_func_8014AD30() (:13524) each emit a file-scope - * `extern void func_80146AFC(void *a0);`, and this TU expands them at :1386 and - * :1541 — after the splice — so an `s32 func_80146AFC` definition collides on the - * RETURN axis. Fixed with the §37/§124 ASM-LABEL ALIAS: the C identifier is - * aF80146AFC, the emitted label is func_80146AFC, so the canonical void decl and - * this s32 definition never share a namespace. Callers discard the result, so the - * void-typed call sites stay codegen-identical. - * - * Both were reproduced and then cleared against the real cpp+cc1-2.7.2 pair using a - * synthetic copy of this TU's declaration environment (.run/uc2/_recon_probe_80146AFC.c): - * the pre-reconcile spelling emits exactly the gate's error pair; the spelling below - * compiles clean. - * - * ORACLE: tools/match_one.py func_80146AFC --c .run/uc2/func_80146AFC.c - * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_after -> MATCH (40 ins) - */ - - -s32 aF80146AFC(void *arg0) __asm__("func_80146AFC"); - -s32 aF80146AFC(void *arg0) -{ - register u8 *p __asm__("$6"); - register u8 *q __asm__("$5"); - u8 *end; - p = (u8 *)&D_8011D030; - end = p + 0xA50; - if ((u32)p < (u32)end) { - q = p + 0x30; - do { - if (*(u16 *)p == 0) { - *(s32 *)(q + 0x4) = *(s32 *)((u8 *)arg0 + 0x8); - *(s16 *)p = *(u16 *)((u8 *)arg0 + 0x0); - *(s16 *)(q - 0x2A) = *(u16 *)((u8 *)arg0 + 0x2); - *(s16 *)(q - 0x26) = *(u16 *)((u8 *)arg0 + 0x4); - *(s16 *)(q - 0x22) = *(u16 *)((u8 *)arg0 + 0x6); - *(s32 *)(q - 0x4) = *(s32 *)((u8 *)arg0 + 0xC); - *(s32 *)(q + 0x0) = *(s32 *)((u8 *)arg0 + 0x10); - return (s32)p; - } - p += 0x58; - q += 0x58; - } while ((u32)p < (u32)end); - } - return 0; -} - - -DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ - - -DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ - - -DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ - - -DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ - - -DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ - - -DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ - - -DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ - - -DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ - - -DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ - - -DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ - - -DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ - - -DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ - - -DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ - - -DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ - - -DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ - - -extern s16 func_8012A68C(void); -extern s16 func_8012A758(void); -extern void func_8004978C(s16 *a0, void *a1); -extern void ApplyMatrixSV(void*, Svec_801372B0*, Svec_801372B0*); -void func_80146F58(s32 a0, s32 a1) { - s16 vec[3]; - u8 mat[0x20]; - vec[0] = func_8012A68C(); - vec[1] = func_8012A758(); - vec[2] = 0; - func_8004978C(vec, mat); - ((void (*)(void *, void *, void *))ApplyMatrixSV)(mat, (void *)a0, (void *)a1); -} - - -extern void func_80015954(s32 a0, s32 a1); -extern void *memcpy(void *dst, const void *src, u32 n); -void func_80146FC4(s32 a0) { - - extern u8 D_80126DB0[]; - extern u16 D_80126DB6; - s32 s1 = a0; - s32 s0; - if (*(s16 *)(s1 + 0xA) >= 0x401) { - s0 = (s32)D_80126DB0; - func_80015954(s0, s1 + 0x4); - memcpy((void *)(s1 + 0x88), (void *)s0, 8); - *(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = D_80126DB6; - } -} - - -DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ - - -DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ - - -DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ - - -DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ - - -DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ - - -DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ - - -DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ - - -DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ - - -DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ - - -DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ - - -DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ - - -DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ - - -DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ - - -DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ - - -DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ - - -DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ - - -DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ - - -DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ - - -DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ - - -DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ - - -DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ - - -DEFINE_func_80147364() /* dedup: shared engine-core @0x80147364 (src/shared) */ - - -DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ - - -DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ - - -DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ - - -DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ - - -DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ - - -DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ - - -DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ - - -DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ - - -DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ - - -DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ - - -DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ - - -DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ - - -DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ - - -DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ - - -DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ - - -DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ - - -DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ - - -DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ - - -DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ - - -DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ - - -DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ - - -DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ - - -DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ - - -DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ - - -DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ - - -DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ - - -DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ - - -DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ - - -DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ - - -DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ - - -DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ - - -DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ - - -DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ - - -DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ - - -DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ - - -DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ - - -DEFINE_func_801483E8() /* dedup: shared engine-core @0x801483e8 (src/shared) */ - - -DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ - - -DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ - - -DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ - - -DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ - - -DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ - - -DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ - - -DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ - - -DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ - - -DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ - - -DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ - - -DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ - - -DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ - - -DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ - - -DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ - - -DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ - - -DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ - - -DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ - - -DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg - -extern s32 ratan2(s32 a0, s32 a1); - -int func_80148AFC(void *a0) { - - extern s32 D_801151D4; - extern ActorFn D_80183FA0[]; - s32 p = (s32)a0; - s32 iVar5 = *(s32 *)(p + 0x20); - register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), - *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; - s32 sVar3; - u8 bVar1; - __asm__("" : "=r"(tmp) : "0"(tmp)); - sVar3 = tmp; - bVar1 = *(u8 *)(p + 0xA9); - - switch (bVar1) { - case 0x41: - return D_80183FA0[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; - case 0x53: - case 0x73: - { - register u32 bb __asm__("$3"); - register s32 c80 __asm__("$2") = 0x80; - register s32 lo __asm__("$4"); - register s32 hi __asm__("$2"); - bb = *(u16 *)(p + 0xAE); - lo = bb & 0xFF; - if (lo != c80 || (hi = bb >> 8) != 0x80) { - s32 sVar4; - __asm__ __volatile__("" : : : "memory"); - sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); - *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; - return 1; - } - return 0; - } - } -} - - -DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ - - -DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ - - -DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ - - -DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ - - -DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ - - -DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ - - -DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ - - -DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ - - -DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ - - -DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ - - -DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ - - -DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ - - -DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ - - -DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ - - -DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ - - -DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ - - - -// @class: schedule -// @stuck: none — MATCH (68 ins) -extern s32 ratan2(s32 a0, s32 a1); - -s32 func_80148D44(void) { - - extern s32 D_801151D4; - extern u8 D_80126C01; - extern u16 D_80126C02; - extern u16 D_80126C06; - extern s32 D_80183FE0[]; - register s32 ang __asm__("$16"); - register s32 a __asm__("$4"); - s32 p; - s32 res; - s32 d; - - p = D_801151D4; - a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), - *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; - d = (s32)D_80126C01; - __asm__ __volatile__("" : : "r"(a)); - ang = a; - if (d == 0x53) { - goto final; - } - if (d < 0x54) { - if (d == 0x41) { - goto call; - } - return 0x41; - } - if (d != 0x73) { - return 0x73; - } - goto final; -call: - return (s32)(s16)((s16 (*)())(D_80183FE0[D_80126C02 >> 0xc]))(); -final: - { - u32 e = D_80126C06; - if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { - return -1; - } - __asm__ __volatile__("" : : : "memory"); - res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; - } - return res; -} - - - -extern s32 ratan2(s32, s32); -/* derived from asm: lui/addu/lw %lo(D_80184020) indexed by (u16>>12)*4, then jalr with no args; - * the result is sign-extended from 16 bits => the table's functions return s16. */ - -s32 func_80148E54(s32 arg0) { - - extern s32 D_801151D4; - extern s16 (*D_80184020[])(); - register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), - *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; - s32 ang; - __asm__("" : "=r"(tmp) : "0"(tmp)); - ang = tmp; - - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - return D_80184020[*(u16 *)(arg0 + 0xAA) >> 12](); - case 0x53: - case 0x73: - if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { - return -1; - } - return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, - 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; - } -} - - -DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ - - -DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ - - -DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ - - -DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ - - -DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ - - -DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ - - -DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ - - -DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ - - -DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ - - -DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ - - -DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ - - -DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ - - -DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ - - -DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ - - -DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ - - -DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ - - -DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ - - -DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ - - -DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ - - -DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ - - -DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ - - -DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ - - -DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ - - -DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ - - -DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ - - -DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ - - -DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ - - -DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ - - -DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ - - -DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ - - -DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ - - -DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ - - -DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ - - -DEFINE_func_80149350() /* dedup: shared engine-core @0x80149350 (src/shared) */ - - -DEFINE_func_80149374() /* dedup: shared engine-core @0x80149374 (src/shared) */ - - -DEFINE_func_801493D0() /* dedup: shared engine-core @0x801493d0 (src/shared) */ - - -DEFINE_func_8014942C() /* dedup: shared engine-core @0x8014942c (src/shared) */ - - -DEFINE_func_80149450() /* dedup: shared engine-core @0x80149450 (src/shared) */ - - -DEFINE_func_801494CC() /* dedup: shared engine-core @0x801494cc (src/shared) */ - - -void func_8012F14C(s32 a0, s32 a1, s32 a2); -void func_8012EF70(s32 a0, s32 a1); - -void func_80149544(s32 a0, s32 a1, s32 a2) -{ - s32 buffer[2]; - - func_8012F14C(*(s32 *)(a0 + 0x20) + 0x34, a1, (s32)buffer); - func_8012EF70((s32)buffer, a2); -} - - -void func_8012F14C(s32 a0, s32 a1, s32 a2); -void func_8012EFB8(s32 a0); - -void func_80149584(s32 param_1, s32 param_2, s32 param_3) -{ - char local_var[8]; - func_8012F14C(*(s32*)(param_1 + 0x20) + 0x34, param_2, (s32)local_var); - ((void (*)(s32, s32))func_8012EFB8)((s32)local_var, param_3); -} - - -DEFINE_func_801495C4() /* dedup: shared engine-core @0x801495C4 (src/shared) */ - - -DEFINE_func_8014964C() /* dedup: shared engine-core @0x8014964c (src/shared) */ - - -DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ - - -DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ - - -DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ - - -DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ - - -DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ - - -DEFINE_func_801497A8() /* dedup: shared engine-core @0x801497a8 (src/shared) */ - - -DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ - - -DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ - - -DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ - - -DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ - - -DEFINE_func_80149954() /* dedup: shared engine-core @0x80149954 (src/shared) */ - - -DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ - - -DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ - - -DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ - - -DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ - - -DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ - - -DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ - - -DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ - - -DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ - - -DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ - - -DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ - - -DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ - - -DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ - - -DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ - - -DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ - - -DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ - - -extern void func_80144A04(s32 *a0); -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); -extern void func_8016EDEC(s32, s32, s32); -s32 func_80149F2C(s32 a0, s32 a1) -{ - void *s1 = a0; - s32 *s0; - if (*(u16 *)a1 == 0x83 || *(u16 *)a1 == 0x61) { - s0 = (s32 *)((s32 (*)())func_80144A04)((s32 *)a1); - if (s0 != 0) { - func_801599A4(s1); - func_80159B3C(s1); - ((void (*)(s32, s32))func_8016EDEC)((s32)s0, 0x1000000); - return 1; - } - } - return 0; -} - - -void func_80149FA8(void) { -} - - -// @class: regalloc-order -// @stuck: none — MATCH (38 ins) -extern s16 currentLocationId; - -s32 func_80149FB0(s32 a0) { - - extern s32 D_80184060[]; - extern u8 D_80078E78[]; - s32 *p = &D_80184060[0]; - register s32 v __asm__("$3") = *p; - u8 *q = &D_80078E78[0]; - s32 loc; - - if (v != 0) { - loc = currentLocationId; - p = p + 1; - do { - if (loc == v) { - goto ret0; - } - v = *p; - p = p + 1; - } while (v != 0); - } - - if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { - return 0; - } - if (*(s16 *)(a0 + 0x1C8) != 0) { - return 0; - } - if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { - ret0: - return 0; - } - v = q[0x48]; - q[0x48] = v ^ 0x80; - return 1; -} - - -DEFINE_func_8014A048() /* dedup: shared engine-core @0x8014a048 (src/shared) */ - - -DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ - - -DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ - - -DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ - - -DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ - - -DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ - - -DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ - - -DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ - - -DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ - - -DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ - - -DEFINE_func_8014A51C() /* dedup: shared engine-core @0x8014a51c (src/shared) */ - - -DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ - - -DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ - - -DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ - - -DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ - - -DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ - - -DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ - - -DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ - - -DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ - - - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_8014A738; - - - - - - - - -DEFINE_func_8014A738() /* dedup: shared engine-core @0x8014A738 (src/shared) */ - - -DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ - - -DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ - - -DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ - - -DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ - - -DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ - - -DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ - - -DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ - - -DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ - - -DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ - - -DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ - - -DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ - - -DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ - - -DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ - - -DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ade0 (src/shared) */ - - -DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ - - -DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ - - -DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ - - -DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ - - -DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ - - -DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ - - -DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ - - -DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ - - -DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ - - -DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ - - -DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ - - -DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ - - -DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ - - -DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ - - -DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ - - -DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ - - -DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ - - -DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ - - -DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ - - -DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ - - -DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ - - -DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ - - -DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ - - -DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ - - -DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ - - -DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ - - -DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ - - -DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ - - -DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ - - -DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ - - -DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ - - -DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ - - -DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ - - -DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ - - -DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ - - -DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ - - -DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ - - -void func_8014BDE0(void) { -} - -DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ - - -DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ - - -DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ - - -DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ - - -DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ - - -DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ - - -DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ - - -DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ - - -DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ - - -DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ - - -DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ - - -DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ - - -DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ - - -DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ - - -DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ - - -DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ - - -DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ - - -DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ - - -extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); -extern s32 D_801840E8; - -void func_8014C1A0(s32 arg0, s32 arg1) { - func_8014C1C8(arg0, arg1, &D_801840E8); -} - - -DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ - - -DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ - - -DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ - - -DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ - - -DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ - - -DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ - - -DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ - - - -/* §37/§73/§124 asm-label alias: the fleet canon declares this `extern void` (engine_core.h, inside 8 - * DEFINE_func_* macros); the byte-true body must return s32. Aliasing the C name sidesteps the - * RETURN-axis conflict with no header edit. This line MUST travel with the body. */ -s32 aF8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4) __asm__("func_8014C4AC"); - -DEFINE_func_8014C4AC() /* dedup: shared engine-core @0x8014C4AC (src/shared) */ - - -DEFINE_func_8014C568() /* dedup: shared engine-core @0x8014c568 (src/shared) */ - - -DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ - - - -extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); - -s16 func_8014C5D0(s32 a0, s32 a1) { - - extern u8 D_801840F0; - return func_8014C5FC(a0, a1, &D_801840F0); -} - - -DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ - - -DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ - - -DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ - - -DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ - - -DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ - - - - - -// @class: schedule -// @stuck: none — MATCH (match_one 91/91) -// -// Levers used (all byte-gated on ov_SC07_006): -// 1. §struct 8-byte alignment-1 struct copy `*(M8_8014C6F4*)(a+0x164) = *(M8_8014C6F4*)(p+0x10)` -// -> the lwl/lwr,lwl/lwr,swl/swr,swl/swr block (engine_types.h M8_xxx convention). -// 2. §17 base-pointer cache: `u8 *p = D_80078E78;` (NOT a direct D_80078E78[0x49]) so gcc pins -// the base into callee-saved $s1 and hoists the la into the prologue (live across the jal). -// 3. §17 register pins: the search result `e` MUST be $v0 and the limit `lim` $v1, else -// local-alloc swaps the loop IV/limit pair ($v1<->$a0) and coalesces `e` into the IV. -// 4. DELAY-SLOT lever (new): writing the compare constant as its own pre-loop statement -// (`want = 0x22;`) instead of the literal `0x22` inside the loop test. With the literal, -// loop.c hoists the `li $a1,0x22` into the loop PREHEADER (after the duplicated entry test), -// so reorg.c's guard branch has nothing local to take and instead COPIES the branch-target -// insn (`addu $v0,$zero,$zero`) into its delay slot and redirects past it — a +1 shift that -// also lets the loop-back branch steal the same insn (nop -> move). Materialising the -// constant in the block BEFORE the entry test makes fill_simple_delay_slots take it from -// the preceding insns, reproducing `beqz $v0,.L8014C7F4 / addiu $a1,$zero,0x22` and leaving -// the loop-back delay slot a nop. `want` needs no pin — gcc lands it in $a1 on its own. - - -DEFINE_func_8014C6F4() /* dedup: shared engine-core @0x8014C6F4 (src/shared) */ - - -DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ - - -DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ - - -DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ - - -DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ - - -DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ - - -DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ - - -DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ - - -DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ - - -DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ - - -DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ - - -DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ - - -DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ - - -DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ - - -DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ - - -DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ - - -DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ - - -DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ - - -DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ - - -DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ - - -DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ - - -DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ - - -DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ - - -DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ - - -DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ - - - - -extern u16 D_80126CC4; - -void func_8014CBE8(void) { - D_80126CC4 = 0; -} - - -DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ - - -DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ - - - -extern void func_8014CD0C(u8 *a0); - -void func_8014CCB4(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014CD0C\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ - - -DEFINE_func_8014CD80() /* dedup: shared engine-core @0x8014cd80 (src/shared) */ - - -DEFINE_func_8014CF04() /* dedup: shared engine-core @0x8014CF04 (src/shared) */ - - - -extern void func_8014D0A4(s32); - -void func_8014D04C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014D0A4\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ - - - - -DEFINE_func_8014D12C() /* dedup: shared engine-core @0x8014D12C (src/shared) */ - - - -DEFINE_func_8014D2A0() /* dedup: shared engine-core @0x8014D2A0 (src/shared) */ - - -extern int D_8019A8A0; -extern void func_8014D438(s32); - -void func_8014D3E0(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014D438\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ - - -DEFINE_func_8014D4C0() /* dedup: shared engine-core @0x8014d4c0 (src/shared) */ - - - - -DEFINE_func_8014D610() /* dedup: shared engine-core @0x8014D610 (src/shared) */ - - - -extern void func_8014D790(s32); - -void func_8014D738(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014D790\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ - - - typedef struct EntD820_8014D820 - { - u16 f0; - u16 f2; - u16 f4; - u16 x; - u16 f8; - u16 y; - u16 fC; - u16 z; - u8 p10[0x10]; - s32 f20; - u8 p24[0x34]; - s32 f58; - u16 f5C; - u16 f5E; - u8 p60[0x10C - 0x60]; - } Ent_8014D820; - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_8014D820; - -// @class: schedule -// @stuck: none — MATCH (304/304), symcheck SYMS-OK 12/12, and the whole-TU cc1 stage now compiles CLEAN -// -// ══════════════════════════════════════════════════════════════════════════════ -// SESSION-22 RE-DERIVATION + THE ROOT-CAUSE FIX FOR THE "ASSEMBLER-STAGE" FAILURE -// ══════════════════════════════════════════════════════════════════════════════ -// The SESSION-21 draft did reach match_one MATCH (re-verified this session, 304/304) -// and symcheck SYMS-OK — but the whole-binary build died with an opaque `Error 33` -// that was logged as "an ASSEMBLER-stage failure I did not finish diagnosing". -// -// IT IS NOT AN ASSEMBLER FAILURE. Stage-by-stage isolation of the real pipeline -// (cpp | cc1 | maspsx | as) over a scratch copy of src/ov_SC01_077/ov_SC01_077_after.c -// with this function spliced in place of its INCLUDE_ASM gives: -// cpp rc=0 -// cc1 rc=33 <-- ".../tu.c:1901: conflicting types for `Ent_8014D820'" -// "src/shared/engine_types.h:434: previous declaration of `Ent_8014D820'" -// maspsx rc=0 -// as rc=0 (only benign "used $at without .set noat" warnings) -// `33` is CC1's exit code, surfaced by the recipe's `set -o pipefail` (Makefile:560). -// Because `as` is the LAST stage in that pipe, make attributes the failure to the -// assembler — the same misread that made func_8012AAAC's "opaque Error 33" look -// assembler-shaped until it was isolated stage by stage. -// -// ROOT CAUSE: the draft declared `typedef struct Ent_8014D820 { ... } Ent_8014D820;` at FILE scope. -// `Ent_8014D820` is already a shared engine type (src/shared/engine_types.h:434, -// typedef struct { u16 guard; u16 pad; u16 field; u8 rest[14]; } Ent_8014D820; -// a 20-byte struct), pulled into every overlay TU through -// src/ov_SC01_077/../shared/engine_core.h. gcc-2.7.2 rejects the redefinition -// outright (an ERROR, not the "type mismatch with previous external decl" -// WARNING that the rest of this TU is full of), so cc1 aborts. -// -// THE FIX, and why this shape: all three helper types are now declared at BLOCK -// scope inside func_8014D820 itself. That is strictly better than renaming to -// `Ent_8014D820` at file scope, because this function is an h_seq family EXEMPLAR -// with 138 members: a file-scope type name has to stay unique against 138 distinct -// overlay TUs *and* against whatever engine_types.h grows next, while a block-scope -// typedef can never collide with anything, in any TU, ever. It also matches the -// fleet convention — src/shared/engine_core.h contains ZERO `typedef struct` -// (all 0 of them); every DEFINE_ macro body uses engine_types.h types or local ones. -// Typedefs emit no code and create no allocno, so the move is byte-neutral: -// re-verified MATCH (304 ins) after the change, and the local DECLARATION ORDER -// below is untouched (§76 — declaration order is the dominant regalloc lever here). -// -// ══════════════════════════════════════════════════════════════════════════════ -// THE BODY (SESSION-21 derivation, each lever re-verified this session) -// ══════════════════════════════════════════════════════════════════════════════ -// func_8014D820 (304 ins, ov_SC01_077, h_seq family exemplar, 138 members). -// The whole residual off the SESSION-18 close=9 seed was a sched1 PERMUTATION -// inside ONE basic block (idx 79..101, the pos/desc set-up between the `slti 0x400` -// guard and the `currentLocationId` test): identical multiset of insns, identical -// register assignment, wrong positions. §66d-5 exactly — classed WIDTH [structural] -// at every waypoint and not structural at all. -// -// The lever (reusable): that block is 12 statements over a small dependency poset -// (load x0/y0/z0 -> add -> store pos.* / desc.*), so source ORDER is the only -// control and the space of linear extensions is enumerable. A dependency-respecting -// sweep found MATCH at -// x0; pos.x; y0; pos.y; z0; tx; pos.z; tz; desc.x; desc.z; ty; desc.y -// i.e. all three loads and both pos stores first, then the two adds, then the desc -// stores, with the y accumulator (`ty`) computed LAST. No pin, no barrier, no -// permuter run. Eleven hand attempts on this window (SESSION-18) were inert or -// worse — hand-reading a 12-statement schedule permutation is the wrong tool; -// brute-forcing the linear extensions is the right one. -// -// Load-bearing levers (each re-verified by removal this session): -// * the `a0v` launder (`__asm__("" : "=r"(a0v) : "0"(a0))`) — drop => 9 mismatched -// * the `a2` $7 pin — drop => 5 -// * the `a2x -> a2` launder (vs a plain copy) — drop => 1 -// * `new_var3` (the s16 stash of dx feeding ratan2) — drop => 2 -// * `new_var2` (the desc.y + 0x10 accumulator) — drop => 2 -// The `a2` pin's live range ENDS before the first `jal` (last use is -// `desc.z = a2[2] - a1[2]`), so it is §42e-CORRECTION / §74-safe to propagate. -// -// SYMBOLS (§58 rule 1/2): all five data externs use the canonical splat spelling and -// the engine_core.h type — `u8 D_801202A0[]`, `u8 D_801152A8[]`, `s16 D_801152AC`, -// `u8 D_801840F8[]`, `s16 currentLocationId`. symcheck: SYMS-OK, 12 symbols agree. -// -// The one deliberate divergence (§27 step 2 / rule 3): func_80135A4C's canonical -// extern is 4-arg but this call site sets only $a0-$a2, so the canonical decl is -// kept verbatim (it is also the TU's own spelling at ov_SC01_077_after.c:1651/1709) -// and the ARITY is cast at the call site. -// -// BANKING NOTE for the orchestrator (carried forward from SESSION-18, still true): -// 1 `self_decl_hdr` axis remains — DEFINE_func_8014D790's body declares -// func_8014D820, so that macro in engine_core.h needs the §85 return-axis widen -// (already applied). With the `Ent_8014D820` collision gone the TU's cc1 stage is clean. - - - - - - - - - - -extern s16 currentLocationId; -extern s32 ratan2(s32 a0, s32 a1); -extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_800139C8(s32 a0, void *a1, void *a2); -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8014DCE0(s32 a0, s32 a1, s32 a2); -extern s32 func_80133784(s32 a0, void *a1, s32 a2); -s32 func_8014D820(s32 a0, u16 *a1, u16 *a2x) -{ - - extern u8 D_801202A0[]; - extern u8 D_801840F8[]; - extern u8 D_801152A8[]; - extern s16 D_801152AC; - /* BLOCK-SCOPE types — see the header note. `Ent_8014D820` at file scope collides with - src/shared/engine_types.h:434 and kills the TU's cc1 stage (exit 33). */ - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_8014D820; - typedef struct EntD820_8014D820 - { - u16 f0; - u16 f2; - u16 f4; - u16 x; - u16 f8; - u16 y; - u16 fC; - u16 z; - u8 p10[0x10]; - s32 f20; - u8 p24[0x34]; - s32 f58; - u16 f5C; - u16 f5E; - u8 p60[0x10C - 0x60]; - } Ent_8014D820; - int new_var2; - s16 new_var3; -register u16 *a2 __asm__("$7"); - V4_8014D820 out[3]; - V4_8014D820 pos; - Desc desc; - Ent_8014D820 *ent; - Ent_8014D820 *p; - s32 dx; - s32 dz; - s32 ex; - s32 ez; - s32 r1; - s32 r2; - s32 r3; - s32 ang; - s32 x0; - s32 y0; - s32 z0; - s32 tx; - s32 tz; - s32 ty; - s32 r; - s32 t; - s32 u; - s32 a0v; -__asm__ __volatile__("" : "=r"(a2) : "0"(a2x)); - t = a2[0]; - u = a1[0]; - dx = t - u; -__asm__ __volatile__("" : "=r"(a0v) : "0"(a0)); - new_var3 = (s16) dx; - t = a2[2]; - u = a1[2]; - dz = t - u; - if (((s16) (dx | dz)) == 0) - { - goto fail; - } - desc.x = dx; - desc.y = a2[1] - a1[1]; - desc.z = a2[2] - a1[2]; - ent = *((Ent_8014D820 **) (a0v + 0x170)); - if (ent->f0 == 0) - { - goto fail; - } - if ((ent->f5C & 0x1000) == 0) - { - goto fail; - } - if (ent->f58 == 0) - { - goto fail; - } - if (((s32 (*)(s32, s32, s32)) func_80135A4C)(ent->f20, ent->f58, (s32) a1) == 0) - { - goto fail; - } - ex = ent->x - (*((u16 *) (a0v + 6))); - ez = ent->z - (*((u16 *) (a0v + 0xE))); - r1 = (s16) ratan2((s16) dz, new_var3); - r2 = (s16) ratan2((s16) ez, (s16) ex); - r3 = (s16) func_80012A60(r1, r2); - if (0x400 <= r3) - { - goto fail; - } - desc.f20 = 0; - desc.f1C = 0; - desc.f18 = 0; - x0 = ent->x; - pos.x = x0; - y0 = ent->y; - pos.y = y0; - z0 = ent->z; - tx = x0 + desc.x; - pos.z = z0; - tz = z0 + desc.z; - desc.x = tx; - desc.z = tz; - ty = (y0 + desc.y) + 8; - desc.y = ty; - if (currentLocationId != 0x3008) - { - for (p = (Ent_8014D820 *) D_801202A0; p < (Ent_8014D820 *) (D_801202A0 + 0x6480); p++) - { - if (p == ent) - { - continue; - } - if (p->f0 == 0) - { - continue; - } - if (p->f5C == 0) - { - continue; - } - if (p->f58 == 0) - { - continue; - } - func_80135888(p->f20, p->f58, (s32) (&pos), (s32) (&desc)); - } - - } - else - { - ang = ratan2(((s16) x0) - ((s16) tx), ((s16) z0) - ((s16) tz)) & 0xFFF; - func_800139C8(ang, D_801840F8, &out[0]); - func_800139C8((s16) (ang - 0x155), D_801840F8, &out[1]); - func_800139C8((s16) (ang + 0x155), D_801840F8, &out[2]); - out[0].x += pos.x; - out[0].y = pos.y; - out[0].z += pos.z; - out[1].x += pos.x; - out[1].y = pos.y; - out[1].z += pos.z; - out[2].x += pos.x; - out[2].y = pos.y; - out[2].z += pos.z; - for (p = (Ent_8014D820 *) D_801202A0; p < (Ent_8014D820 *) (D_801202A0 + 0x6480); p++) - { - if (p == ent) - { - continue; - } - if (p->f0 == 0) - { - continue; - } - if (p->f5C == 0) - { - continue; - } - if (p->f58 == 0) - { - continue; - } - if (func_8014DCE0((s32) p, (s32) (&pos), (s32) (&out[0])) != 0) - { - __builtin_memcpy((void *) ((s32) (&desc)), (void *) ((s32) (&pos)), 8); - } - } - - } - r = func_80133784(0, &pos, (s32) (&desc)); - if ((r == 0) || ((r == 0x2000) && (((*(u16 *) D_801152A8) | ((u16) D_801152AC)) == 0))) - { - ent->x = desc.x - desc.f18; - ent->y = desc.y; - ent->z = desc.z - desc.f20; - desc.x -= pos.x; - desc.y -= pos.y; - desc.z -= pos.z; - *((u16 *) (a0v + 6)) = a1[0] + desc.x; - new_var2 = desc.y; - new_var2 = new_var2 + 0x10; - *((u16 *) (a0v + 0xA)) = a1[1] + new_var2; - *((u16 *) (a0v + 0xE)) = a1[2] + desc.z; - } - else - { - *((u16 *) (a0v + 6)) = a1[0]; - *((u16 *) (a0v + 0xA)) = a1[1] + 0x10; - *((u16 *) (a0v + 0xE)) = a1[2]; - } - return 1; - fail: - *((s32 *) (a0v + 0x170)) = 0; - - return 0; -} - - -DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ - - -DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ - - - -extern void func_8014DF94(s32); - -void func_8014DF3C(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014DF94\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ - - -DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ - - -DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014e284 (src/shared) */ - - - -extern void func_8014E48C(s32); - -void func_8014E434(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014E48C\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ - - -DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ - - -extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); -extern s32 func_8014D2A0(s32 arg0, void *a1, void *a2); -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); -// -// The return type is LOAD-BEARING here (see DECAY note below), so `void` is not an option. -// Fix = the §37/§124 ASM-LABEL ALIAS, the same lever that banked func_8014C4AC today -// (.run/sweep/*/func_8014C4AC.c): define the body under the C name aF8014E5B4 carrying -// __asm__("func_8014E5B4"). The emitted symbol is unchanged, the C identifier never collides -// with the macro's extern, and NO tracked header edit is needed — the engine_core.h:13392 -// §85 return-axis widen described in the old banking note is now UNNECESSARY. -// Byte-checked: match_one MATCH (0 mismatches) before and after the rename. -// The alias line MUST travel with the body to every sibling overlay. -// -// DECAY FIX (2026-08-01, REDRAFT lane) — why the return type cannot be `void`: with `void`, -// gcc-2.7.2 drops the value axis entirely: no `addiu $v0,$zero,0x1`, no `addu $v0,$zero,$zero` -// at .L8014E674, and the `j .L8014E678` merge disappears (the taken path falls straight into -// the shared epilogue), which also frees $v0 so the last `lhu` lands in $v0 instead of the -// target's $v1. `s32` fixes all 23 mismatches at once. -// -// Keys (same D_801202A0 96-entry / stride-0x10C sweep as the func_8014CF04 and func_8014D2A0 -// siblings, so most of it is the already-banked idiom): -// -// (1) LOOP-BOUND DUALITY, register-relative BOTH ends (differs from func_8014CF04!). The -// target computes `addiu $v1,$s1,0x6480` for the ENTRY guard and then a separate -// `addu $s5,$v1,$zero` AFTER the guard branch for the loop-carried bound. That extra -// copy is 1 whole instruction: the plain `e = p + 0x6480; if (p < e)` spelling folds it -// away and compiles to 58 ins. The spelling that reproduces it is -// `if (p < p + 0x6480) { e = p + 0x6480; ... }` -// — the guard makes $v1, CSE turns the in-body `e = p + 0x6480` into a copy of it, and -// regalloc does not coalesce (gcc-2.7.2 has no coalescing, regalloc.md K8). The back edge -// then uses the register ($s5), NOT a rematerialised %hi/%lo(D_80126720) as in -// func_8014CF04 — so do NOT reuse that sibling's absolute-bound half here. -// -// (2) TWO INDUCTION VARIABLES, secondary base +0xE. `q = p + 0xE` carries every access except -// the two that use the entry pointer itself (`*(u16 *)p` and `*(u8 **)(a0+0x17C) = p`): -// offsets -0x8 / 0x0 / 0x12 / 0x4A / 0x4E off q == 0x6 / 0xE / 0x20 / 0x58 / 0x5C off p. -// A single-pointer spelling is NOT equivalent: gcc emits ONE base and the function comes -// out 56 ins (verified). The negative displacement is the tell that the second pointer is -// in the source, not a compiler-made giv. -// -// (3) REGISTER PINS ($16/$17) — the one non-obvious lever, and it is a genuine density -// knife-edge (regalloc.md K2 / §RC-15). Unpinned, the .lreg reads -// p: 9 refs / 24 insns -> floor_log2(9)*9/24 = 1.125 -// q: 8 refs / 22 insns -> floor_log2(8)*8/22 = 1.091 -// so p wins $s0 by ~3% and the whole function comes out with p/q SWAPPED (17 mismatches, -// every one of them a bare $s0<->$s1 rename). The target wants q in $s0. Decl-order swap -// does nothing (ties are not what decides it — p genuinely out-scores q). Rather than -// hunt a +1-ref anchor (§RC-11 `#APP` would sit next to three delay slots that maspsx -// fills: the `beqz $a1` slot, the `jal` slot and the `bnez` slot), pin both: -// register u8 *p __asm__("$17"); register u8 *q __asm__("$16"); -// Both are callee-saved, so the live-across-`jal` range is §42e/§74-safe by construction -// (the ov_SC03_099 func_8014D820 caveat only applies to caller-saved pins). Everything -// else falls out naturally: a0->$s2, a1->$s3, a2->$s4, e->$s5. -// -// (4) `t = *(s32 *)(q + 0x4A)` is loaded ONCE and reused as arg1 of func_80135888 — that is -// why `lw $a1, 0x4A($s0)` sits at the zero-test rather than at the call. -// -// The func_80135888 decl below is byte-compatible with the one this TU already carries at -// ov_SC01_077_after.c:2303, so it is not a second conflict axis. - -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); - -/* §37/§124 asm-label alias: the fleet canon declares this `extern void` (engine_core.h:13392, - * inside DEFINE_func_8014E48C()); the byte-true body must return s32. Aliasing the C name - * sidesteps the RETURN-axis conflict with no header edit. This line MUST travel with the body. */ -s32 aF8014E5B4(s32 a0, void *a1, void *a2) __asm__("func_8014E5B4"); - -DEFINE_func_8014E5B4() /* dedup: shared engine-core @0x8014E5B4 (src/shared) */ - - - -extern void func_8014E6F8(struct SubE6F8*); - -void func_8014E6A0(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014E6F8\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ - - -DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ - - -DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ - - - - -void func_8014E934(s32 _arg0) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014E98C\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ - - -DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ - - -extern s32 func_8014ED80(struct SubED80 *a0); -extern int D_8019A8A0; - -void func_8014ED28(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014ED80\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ - - -DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ - - - -extern s32 func_8014F24C(struct SubF24C*); - -void func_8014F1F4(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F24C\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ - - -DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ - - -DEFINE_func_8014F3E8() /* dedup: shared engine-core @0x8014f3e8 (src/shared) */ - - -extern int D_8019A8A4; -extern s32 func_8014F4C0(s32); - -s32 func_8014F468(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F4C0\n" - "lui $at, %%hi(D_8019A8A4)\n" - "sw $v0, %%lo(D_8019A8A4)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A4)\n" - "lw $v0, %%lo(D_8019A8A4)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014F4C0() /* dedup: shared engine-core @0x8014f4c0 (src/shared) */ - - -extern int D_8019A8A4; -extern int func_8014F74C(); - -int func_8014F6F4(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014F74C\n" - "lui $at, %%hi(D_8019A8A4)\n" - "sw $v0, %%lo(D_8019A8A4)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A4)\n" - "lw $v0, %%lo(D_8019A8A4)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ - - - -// @class: other -// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_8019A8A4; maspsx auto-fills jal delay slot) - -extern s32 func_8014FA70(s32 a0); - -void func_8014FA04(s32 a0) -{ - - extern s32 D_8019A8A4; - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "sw $ra, 16($sp)\n" - "lw $v0, 68($a0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 1f\n" - "addu $v0, $zero, $zero\n" - "lui $a1, 0x1f80\n" - "ori $a1, $a1, 0x03fc\n" - "addu $t0, $a1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "lui $at, %%hi(D_8019A8A4)\n" - "sw $v0, %%lo(D_8019A8A4)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A4)\n" - "lw $v0, %%lo(D_8019A8A4)($v0)\n" - "1:\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ - - - -extern s32 func_8014FC18(u8*); - -void func_8014FBC0(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FC18\n" - "lui $at, %%hi(D_8019A8A4)\n" - "sw $v0, %%lo(D_8019A8A4)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A4)\n" - "lw $v0, %%lo(D_8019A8A4)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ - - - -extern int func_8014FD54(int); - -void func_8014FCFC(void) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FD54\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ - - -DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ - - - -DEFINE_func_8014FE60() /* dedup: shared engine-core @0x8014FE60 (src/shared) */ - - -DEFINE_func_8014FFDC() /* dedup: shared engine-core @0x8014ffdc (src/shared) */ - - -DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ - - -DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ - - -DEFINE_func_801502EC() /* dedup: shared engine-core @0x801502ec (src/shared) */ - - -DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ - - - - -extern void func_801504D8(u16 *a0); - -s32 func_80150480(s32 _arg0) -{ - __asm__ __volatile__( - ".set noreorder\n" - "addiu $sp, $sp, -24\n" - "lui $v1, 0x1f80\n" - "ori $v1, $v1, 0x03fc\n" - "sw $ra, 16($sp)\n" - "addu $t0, $v1, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_801504D8\n" - "lui $at, %%hi(D_8019A8A0)\n" - "sw $v0, %%lo(D_8019A8A0)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "lui $v0, %%hi(D_8019A8A0)\n" - "lw $v0, %%lo(D_8019A8A0)($v0)\n" - "lw $ra, 16($sp)\n" - "addiu $sp, $sp, 24\n" - : : : "memory"); -} - - -DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ - - -DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ - - -DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ - - -extern void func_80147324(s32 a0); -extern void func_8014ACE8(void *a0, s32 a1, s32 a2); -extern void func_8014ADA8(s32 a0, s32 a1); -extern void func_8014BB24(s32 a0, s32 a1, s32 a2); - - - -s32 func_801506A4(s32 arg0, s32 arg1) { - - extern u16 aD80078EB4 __asm__("D_80078EB4"); - extern void func_80150820(s32, s32); - extern void func_8015086C(int); - extern unsigned short D_80184108[]; - extern unsigned short D_80184110[]; - extern unsigned short D_80184118[]; - - int mode; - - mode = ((struct Ent_801506A4 *)arg1)->unk0; - ((struct Ent_801506A4 *)arg1)->unk5C |= 1; - switch (mode) { - case 0x31: - ((void(*)(int))func_80147324)(0x452); - ((void(*)(int, unsigned))func_8014ADA8)(((int)arg0), D_80184108[((struct Ent_801506A4 *)arg1)->unk70]); - ((void(*)(int, int, unsigned))func_8014ACE8)(((int)arg0), 3, D_80184108[((struct Ent_801506A4 *)arg1)->unk70]); - break; - case 0x32: - if ((*(unsigned short*)&aD80078EB4) != 0) { - ((void(*)(int))func_80147324)(0x452); - ((void(*)(int, unsigned, int))func_8014BB24)(((int)arg0), D_80184110[((struct Ent_801506A4 *)arg1)->unk70], 1); - ((void(*)(int, int, unsigned))func_8014ACE8)(((int)arg0), 2, D_80184110[((struct Ent_801506A4 *)arg1)->unk70]); - } - break; - case 0x33: - ((void(*)(int))func_80147324)(0x452); - ((void (*)(int, unsigned))func_80150820)(((int)arg0), D_80184118[((struct Ent_801506A4 *)arg1)->unk70]); - break; - case 0xC5: - case 0x27B: - ((void(*)(int))func_80147324)(0x452); - func_8015086C(((int)arg0)); - break; - } -} - - -DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ - - -DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ - - -DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ - - -DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ - - - typedef struct - { - u16 x; - u16 y; - u16 z; - u16 w; - } V4_8015094C; - -extern s32 func_80021174(s32 a0, s32 a1); - -s32 func_8015094C(s32 param_1) { - - extern S16 D_80199EC8; - extern s32 D_80184120; - extern s32 D_80126990; - extern s32 D_80126994; - extern u8 D_80126948[]; - struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ - S16 local; /* 0x10 @ 0x40 */ - s32 pad1[4]; /* 0x10 @ 0x50 */ - register u8 *cam __asm__("$17") = D_80126948; - s32 ret; - - local = D_80199EC8; - arg.x = *(short *)(param_1 + 6); - arg.mid = D_80126994; - arg.y = *(short *)(param_1 + 0xe); - ret = func_80021174(D_80184120, (s32)&arg); - if (ret == 0) { - { - short cur = *(short *)(param_1 + 6); - s32 diff = D_80126990 - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - { - short cur = *(short *)(param_1 + 0xe); - s32 diff = *(s32 *)(cam + 0x50) - cur; - s32 av = (diff < 0) ? -diff : diff; - if (av >= 5) { - *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; - } - } - (void)&pad1; - return 1; - } - return 0; -} - - - -extern s32 func_8014FA70(s32 a0); -extern void func_80015978(s32 a0, s32 *a1); - -void func_80150A70(s32 a0) -{ - - extern s32 D_8019A8A4; - __asm__ __volatile__( - ".set\tnoreorder\n" - "addiu $sp, $sp, -24\n" - "sw $s0, 16($sp)\n" - "addu $s0, $a0, $zero\n" - "sw $ra, 20($sp)\n" - "lh $v1, 6($s0)\n" - "lh $v0, 136($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 10($s0)\n" - "lh $v0, 138($s0)\n" - "nop\n" - "bne $v1, $v0, 1f\n" - "nop\n" - "lh $v1, 14($s0)\n" - "lh $v0, 140($s0)\n" - "nop\n" - "beq $v1, $v0, 3f\n" - "nop\n" - "1:\n" - "lw $v0, 68($s0)\n" - "lui $v1, 0x4\n" - "and $v0, $v0, $v1\n" - "bnez $v0, 2f\n" - "addiu $a0, $s0, 4\n" - "lui $a2, 0x1f80\n" - "ori $a2, $a2, 0x03fc\n" - "addu $t0, $a2, $zero\n" - "lw $t1, 0($t0)\n" - "nop\n" - "sw $sp, 0($t1)\n" - "addiu $t1, $t1, -4\n" - "addu $sp, $t1, $zero\n" - "jal func_8014FA70\n" - "addu $a0, $s0, $zero\n" - "lui $at, %%hi(D_8019A8A4)\n" - "sw $v0, %%lo(D_8019A8A4)($at)\n" - "addiu $sp, $sp, 4\n" - "lw $sp, 0($sp)\n" - "addiu $a0, $s0, 4\n" - "2:\n" - "jal func_80015978\n" - "addiu $a1, $s0, 136\n" - "3:\n" - "lw $ra, 20($sp)\n" - "lw $s0, 16($sp)\n" - "addiu $sp, $sp, 24\n" - ".set\treorder\n" - : : : "memory"); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) - - -void func_80150B28(int param_1) { - - extern s32 D_800AE6B0; - extern void (*D_80184124[])(void); - u32 idx; - register u32 sub __asm__("$2"); - - if ((D_800AE6B0 & 0x80FFFFFF) == 0) { - idx = *(u16 *)(param_1 + 0x16C); - if (idx != 0 && idx < 0x26) { - sub = idx - 1; - D_80184124[sub](); - } - } - *(u16 *)(param_1 + 0x16C) = 0; -} - - -void func_80150B9C(void) { -} - -DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ - - -DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ - - -DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ - - -DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ - - -DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ - - -DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ - - -DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ - - -DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ - - -DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ - - -DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ - - -DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ - - -DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ - - -DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ - - -DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ - - -DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ - - -DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ - - -DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ - - -DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ - - -DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ - - -DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ - - -DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ - - -void func_80150F78(void) { -} - -DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ - - -DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ - - -DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ - - -DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ - - -DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ - - -DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ - - -DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ - - -void func_801510B8(void) { -} - -void func_801510C0(void) { -} - -DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ - - -DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ - - -DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ - - -void func_80151130(void) { -} - -DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ - - -DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ - - -DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ - - -DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ - - -DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ - - -DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ - - -DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ - - -DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ - - -DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ - - -DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ - - - -/* func_80151664 — INTEGRATE lane. - * Fleet canon (src/shared/engine_core.h:2924, inside DEFINE_func_8015410C()) declares - * extern void func_80151664(void); - * so a `void func_80151664(s32 a0)` definition is `conflicting types` in every TU that - * expands that macro (ov_SC01_077_after.c:3910 does). Cookbook §73 PARAMS axis / §42: - * keep the canonical (void) signature and read the incoming argument through a $a0 pin. - * The decl below is reproduced verbatim so this file compiles the real conflict. */ -extern void func_80151664(void); - -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801470AC(s32 *a0); -extern void func_801472B4(void *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80153C18(); /* fleet canon: K&R empty prototype (engine_core.h:75, :1682 defines it (void)); - * a prototyped (s32) decl is `conflicting types` in this TU. Arg still - * passes in $a0 under default promotions -> codegen unchanged. */ - -void func_80151664(void) { - register s32 a0v __asm__("$4"); - s32 s0; - s32 v1; - - s0 = a0v; - func_80154A74(s0, 0x11); - func_801553C0(s0); - func_801470AC((s32 *)s0); - func_801472B4((void *)s0); - v1 = *(s32 *)(s0 + 0x20); - *(s16 *)(s0 + 0x3E) = 0; - *(s16 *)(s0 + 0x40) = 0; - *(s16 *)(s0 + 0x42) = 0; - *(s8 *)(s0 + 0xDD) = 0; - *(s16 *)(s0 + 0x3C) = *(u16 *)(s0 + 0x3C) & 0xFFFE; - *(s16 *)(v1 + 0x10) = 0; - *(s16 *)(s0 + 0x60) = 0x1000; - *(s16 *)(s0 + 0x62) = 0x1000; - *(s16 *)(s0 + 0x64) = 0x1000; - func_801477E8((s32 *)s0, 0); - func_80153C18(s0); -} - - -DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ - - -DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ - - -DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ - - -void func_80151878(void) { -} - -DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ - - -DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ - - -DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ - - - - -void func_80151944(void *a0) { - - extern void (*D_801841B8[])(void); - D_801841B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ - - -DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ - - -DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ - - -DEFINE_func_80151B98() /* dedup: shared engine-core @0x80151b98 (src/shared) */ - - -DEFINE_func_80151C54() /* dedup: shared engine-core @0x80151c54 (src/shared) */ - - - - -void func_80151D24(void *a0) { - - extern void (*D_801841C8[])(void); - D_801841C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ - - -DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ - - -DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ - - -DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ - - -DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ - - -DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ - - - - -void func_80152058(void *a0) { - - extern void (*D_801841EC[])(void); - D_801841EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); - -void func_801520DC(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_801841DC; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_801472C8(arg0); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_801841DC); - func_801477E8(arg0, 0x40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); - func_80147324(0x441); - func_80146CA0(arg0); -} - - -DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ - - -DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ - - -DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ - - -DEFINE_func_801522CC() /* dedup: shared engine-core @0x801522cc (src/shared) */ - - - - -void func_80152370(void *a0) { - - extern void (*D_80184200[])(void); - D_80184200[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (67 ins) - -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80019064(void *a0); -extern int func_80151204(int arg, int a1); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8001382C(s32 a0, void *a1, void *a2); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - - -void func_801523F4(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern s32 D_800D58AC; - extern u8 D_8018420C[]; - s32 pad[4]; - s32 buf[4]; - register s32 s0a __asm__("$16"); /* $s0 = buf */ - register s32 s2a __asm__("$18") = (s32)&D_8018420C; /* $s2 = &D_8018420C */ - - ((void (*)(s32, s32))func_80146E90)(arg0, 0); - func_80019064(&D_80062C04); - ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); - if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), - (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); - } else { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); - } - func_80154A74(arg0, 0x16); - ((void (*)(s32))func_80149020)(arg0); - s0a = (s32)buf; - ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, - s2a, s0a); - ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); - ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); - func_80147324(0x451); - ((void (*)(s32))func_80146CA0)(arg0); - (void)pad; -} - - -DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ - - -DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ - - - - -void func_80152698(void *a0) { - - extern void (*D_8018421C[])(void); - D_8018421C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ - - -DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ - - -DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ - - - - -void func_8015282C(void *a0) { - - extern void (*D_80184234[])(void); - D_80184234[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_801528B0(s32 arg0) -{ - - extern u8 D_80062C04[]; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_80184224; - func_80019064(&D_80062C04); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - func_80146DB8(arg0, &D_80184224); - func_801477E8(arg0, 0xFFF00000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ - - -DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ - - -DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ - - -DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ - - - - -void func_80152B6C(void *a0) { - - extern void (*D_80184248[])(void); - D_80184248[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ - - -DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ - - -DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ - - -DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ - - - - -void func_80152D24(void *a0) { - - extern void (*D_80184264[])(void); - D_80184264[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ - - - -extern void func_80019064(void *a0); -extern void func_80146CA0(void *a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147324(s32 a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8014CBF8(void *a0); -extern int func_80151204(int arg, int a1); -extern void func_80154274(s32 *a0, s32 a1); - -void func_80152DA8(s32 arg0) -{ - - extern s32 D_80062C14; - extern M2C_UNK D_800D5880; - extern M2C_UNK D_80184254; - func_80019064(&D_80062C14); - func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); - func_80149020(arg0); - func_80154274(arg0, &D_800D5880); - func_80147324(0x451); - M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; - M2C_FIELD(arg0, s8 *, 0xDF) = 8; - func_80146DB8(arg0, &D_80184254); - func_801477E8(arg0, 0xFFE40000); - func_8014CBF8(arg0); - func_801474EC(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ - - -DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ - - -DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ - - -DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ - - - - -void func_80153060(void *a0) { - - extern void (*D_80184278[])(void); - D_80184278[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ - - -DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ - - -DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ - - -DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ - - -DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ - - -DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ - - - - -void func_80153320(void *a0) { - - extern void (*D_8018428C[])(void); - D_8018428C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ - - -DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ - - -DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ - - -DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ - - -DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ - - -DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ - - -DEFINE_func_801535F4() /* dedup: shared engine-core @0x801535F4 (src/shared) */ - -DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ - - -DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ - - -extern void func_80015954(s32 a0, s32 a1); -extern void func_80015978(s32 a0, s32 *a1); -extern void func_800139C8(s32 a0, void *a1, void *a2); -extern s32 func_80153978(s32 a0, u16 *src); -extern void *memcpy(void *dst, const void *src, u32 n); -s32 func_80153800(s32 a0) { - - extern void (*D_8011DB28)(s32 a0); - extern u8 D_80126DB0[]; - extern u16 D_80126DB6; - s32 s1 = a0; - s32 s0; - s32 s2; - u8 bVar1; - s16 buf1[4]; - s16 buf2[4]; - if (D_8011DB28 != 0) { - ((void (*)(s32, s32))func_80015978)(s1 + 4, s1 + 0x88); - memcpy((void *)(s1 + 0x90), (void *)(s1 + 0x88), 8); -ret0: - return 0; - } - bVar1 = *(u8 *)(s1 + 0xDE); - if (bVar1 >= 0x21) { - s32 base = (s32)D_80126DB0; - func_80015954(base, s1 + 4); - memcpy((void *)(s1 + 0x88), (void *)base, 8); - memcpy((void *)(s1 + 0x90), (void *)(s1 + 0x88), 8); - *(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = D_80126DB6; - return 0; - } - { - register s32 m __asm__("$3") = bVar1 * 4; - s2 = m; - buf2[1] = *(u16 *)(s1 + 0xA2) - m; - } - for (s0 = 0; s0 < 0x80; s0++) { - s32 ang = s0 * 0x200000; - buf1[0] = 0; - buf1[1] = 0; - buf1[2] = s2; - func_800139C8(ang >> 0x10, buf1, buf1); - buf2[0] = *(u16 *)(s1 + 0xA0) + buf1[0]; - buf2[2] = *(u16 *)(s1 + 0xA4) + buf1[2]; - if (((s32 (*)(s32, void *))func_80153978)(s1, buf2) == 0) { - goto ret0; - } - } - *(u8 *)(s1 + 0xDE) = *(u8 *)(s1 + 0xDE) + 1; - return 1; -} - - -DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ - - -extern s32 func_80133784(s32 a0, void *a1, s32 a2); -extern void *memcpy(void *dst, const void *src, u32 n); -s32 func_801539F8(s32 a0, void * a1) -{ - u8 buf1[8]; - u8 buf2[8]; - u8 buf3[8]; - s32 r1, r2, r3; - memcpy(buf1, (void *)(a0 + 0xA0), 8); - memcpy(buf2, a1, 8); - *(s16 *)(buf1 + 2) -= 4; - r1 = func_80133784(0, buf1, buf2); - if (r1 != 0x2000) { - return 1; - } - memcpy((void *)buf1, (void *)(s32)buf2, 8); - *(s16 *)(buf2 + 2) += 8; - r2 = func_80133784(0, buf1, buf2); - if (r2 != r1) { - return 1; - } - r3 = func_80133784(2, buf2, buf3); - if (r3 != r2) { - return 1; - } - *(s16 *)(a0 + 0x88) = *(s16 *)(buf2 + 0); - *(s16 *)(a0 + 0x8A) = *(s16 *)(buf2 + 2); - *(s16 *)(a0 + 0x8C) = *(s16 *)(buf2 + 4); - memcpy((void *)(a0 + 0x90), (void *)(a0 + 0x88), 8); - return 0; -} - - -DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ - - -DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ - - -DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ - - -DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ - - -DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ - - -DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ - - -DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ - - -DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ - - -DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ - - -DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls -extern void func_80019064(void *a0); - -void func_80153CCC(S80153CCC *a0) { - - extern s32 D_801842A0; - extern void (*D_801842C8[])(void *a0); - extern s16 D_8011DB0C; - extern u16 D_8011F748; - ((s32 (*)(s32))func_80019064)((s32)&D_801842A0); - D_801842C8[a0->idx](a0); - D_8011DB0C = 0; - D_8011F748 = 0; -} - - -DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ - - - -// @class: regalloc-order -// @stuck: none — MATCH (33/33) - -extern void func_80147324(s32 arg0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_80146CA0(void *a0); -extern s16 currentLocationId; - -void func_80153D7C(s32 param_1) -{ - - extern u8 D_801842A8; - func_80147324(0x451); - func_80154274((s32 *)param_1, (s32)&D_801842A8); - func_80149020((s32 *)param_1); - *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); - *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); - *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); - if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; - else *(u8 *)(param_1 + 0xde) = 10; - *(u8 *)(param_1 + 0xdf) = 0; - __asm__ __volatile__("" ::: "memory"); - func_80146CA0((void *)param_1); -} - - -DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ - - -DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ - - -DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ - - -DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ - - -DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ - - -DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ - - -DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ - - -DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ - - -DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ - - -DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ - - -DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ - - -DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ - - -DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ diff --git a/src/ov_SC03_107/ov_SC03_107_jr_801458E0.c b/src/ov_SC03_107/ov_SC03_107_jr_801458E0.c new file mode 100644 index 000000000..c8f7741ed --- /dev/null +++ b/src/ov_SC03_107/ov_SC03_107_jr_801458E0.c @@ -0,0 +1,4968 @@ +#include "common.h" +#include "../shared/engine_core.h" + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern void func_80029444(void); +extern void func_800D1754(void); +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern s32 func_801508B4(s32); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern s32 func_8016E95C(); +extern void func_801754A8(void); +extern void func_8013BC7C(); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern int func_801288E8(int arg0); +extern int func_80128940(int arg0); +extern void func_80010AE0(s32 a0); +extern CdFileLoc cdFileLocTable[]; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s32 func_80128C98(s32 arg0); +extern s32 func_80128CFC(s32 arg0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(); +extern void func_8012944C(void); +extern void func_80015B6C(s32, s16, s32, s16, s32, s32, s32, s32, s32, s32); +extern void GsSortBg(s32 *, void *, u16, s32 *); +extern void GsSortFastBg(s32 *, void *, u16, s32 *); +extern unsigned short D_800B99F0; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern s32 D_80126E60[]; +extern s8 D_801150D6; +extern s8 D_801152C0; +extern u8 D_80127504; +extern void func_800144D4(void); +extern void func_80129C40(s32 _arg0); +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern s32 D_80126F04[]; +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern s32 D_800AE688[]; +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A018(s32 a0, s32 a1); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern void func_8012A1BC(void); +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 func_80012F74(s32, s32, s32, s32); +extern void func_8012A418(void); +extern Vec8 D_80114F24; +extern void func_8012A464(void); +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s32 func_80047D3C(s32 a0); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_8012A6D0(void* a0, void* a1); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern void func_8012ACA0(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern Mat32 D_800AE620; +extern void RotMatrixX(int r, void *m); +extern void RotMatrixY(int r, void *m); +extern void RotMatrixZ(int r, void *m); +extern s32 func_8012B4B8(int param_1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s32 func_80047948(s32 a0); /* rsin-like: angle (0..0xFFF) -> 1.12 fixed */ +extern s32 func_8004787C(s32 a0); /* rcos-like: angle (0..0xFFF) -> 1.12 fixed */ +extern s32 func_8012B77C(s32 out, s32 from, s32 to); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8012C098(void *param_1); +extern s32 func_8012C0EC(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C750(s32 a0); +extern s32 func_8012C820(u8 *a0); +extern u16 D_801274E4[]; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern s32 func_8012CC88(); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012CC88(s32 a0, s32 a1, s32 a2); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(s32 arg0); +extern void func_8012E138(); +extern void func_8012DFD4(u8 *a0); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012E014(s32 a0); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_80049CAC(); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern s32 func_80135888(); +extern void func_8012E138(int model); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern void func_8012E364(s32 arg0_); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern s32 func_8016B428(s32); +extern void func_80019064(void *); +extern void func_8012E9C0(int param_1); +extern void func_8012EA90(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern s32 aF8012EFB8(); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_80015954(s32 a0, s32 a1); +extern void func_8012F274(s32 a0, s32 a1); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void func_8004914C(); +extern void func_800491AC(); +extern s32 RotTransPers(s32, s32, s32*, s32*); +extern s32 * func_8012F40C(s32 *param_1, s32 param_2); +extern s32 * func_8012F49C(s32 *param_1, s32 param_2, s32 param_3); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_8012F8C8(int param_1); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern void func_80131B14(void); +extern void func_8012FCC4(int param_1); +extern void func_8012FDA8(int param_1); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern void func_8012CBF4(s32); +extern s32 func_80131D68(s32 a0, s32 a1); +extern void func_80130650(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130A18(u8 *a0); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void func_8012CBCC(s32); +extern void func_80131E00(struct S80131E00*, s32); +extern void func_80130C08(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_80131CF4(s32 a0); +extern void func_80019064(void *a0); +extern s32 aF80131CA8(); +extern s32 aF80131CF4(); +extern int func_80131D68(int a0, int a1); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void func_80131EEC(void *a0); +extern void func_80131F28(void *a0); +extern void func_80131F64(void *a0); +extern void func_80131FA0(void *a0); +extern void func_80131FDC(void *a0); +extern void func_8001C214(int, int); +extern void func_80132018(int param_1); +extern void func_801320D0(void); +extern void func_801320D8(int param_1); +extern void func_80132144(int param_1); +extern void func_801321B0(int param_1); +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void gteMIMefunc(); +extern void func_801325B8(int dst, int src, int m0, int mm, int arg5); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_80135888(s32, s32, s32, s32); +extern void func_80132F40(s32 arg0); +extern void func_801330E0(void * param_1, s16 * param_2, s32 param_3); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_801330E0(); +extern void func_8013339C(s16 *a0, s16 *a1); +extern void func_80133298(s32 *a0); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern s32 D_8019A77C[]; +void func_80136BC4(s32 a0); +extern void func_8013373C(int a0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133AB0(s16 flag, s16 x, s16 y, s32 arg3); +extern s32 func_80133CD4(); +extern s32 func_80134310(Vec3s *a0, Vec3s *a1, s32 a2); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int param_1, s16 param_2, s16 param_3, int param_4); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_801365B8(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void func_80136C54(void); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern u16 D_80126CC4; +extern M2C_UNK func_800153CC(M2C_UNK, u16, M2C_UNK, M2C_UNK, s32, s32); +extern void func_80136DFC(void); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80136F3C(s32 a0, s32 a1); +extern void func_80137030(s16 a0, s16 a1); +extern void func_80137178(s32 a0, s32 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 aF80137614(); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern void func_80139BE0(s32 a0); +extern void * aF801376E8(); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern void func_8013A860(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern s32 D_801269F0; +extern s16 D_801269F4; +extern s32 D_801269F8; +extern void func_80138BE0(s32 a0); +extern void func_80137BD8(s32 a0); +extern void func_8013A380(void); +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80137DD4(s32 ent, u8 *arg, u8 *work); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(u8 *arg0, u8 arg1, s32 arg2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void func_80138C30(void *a0); +extern void func_80139C7C(u8 *a0); +extern s32 func_8013A8FC(s32 arg0); +extern s32 func_80138C60(s32 arg0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_801395D4(void * a0); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013DBE4(); +extern void func_8013D9B0(); +extern void func_8013D330(void); +extern void func_8013D178(void); +extern void func_8013CF68(void); +extern void func_8013CB84(void); +extern void func_8013CF68(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D53C(void *); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_8013D53C(void *arg0v); +extern void func_800599B8(u16*); +extern void func_8013D9B0(int param_1); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EF88(); +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern s16 D_8011512A; +extern u16 D_8011512E; +extern u8 D_80115140[]; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical redecl (§8e) */ +extern u8 D_8011515C; /* macro-canonical redecl (§8e) */ +extern u8 D_80183544[]; +extern u8 D_8018355C[]; +extern u16 D_80183460[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical redecl (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +extern short D_80115128; +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +extern s32 func_8014032C(s32 param_1, s32 param_2); +extern u8 D_80115148[]; +extern u8 D_80062BDC; +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern s32 *func_80140D68(s32 *, Prim4 *, s32, s32, s32); +extern s32 * func_80140958(); +extern s32 * func_80140D68(); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern int func_80029FE4(void); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); +extern int func_80141100(int param_1); +extern Prim_1412A8 * aF801412A8(); +extern void func_800291A0(s32, s32); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_801415C0(s32 param_1, s32 param_2); +extern u8 D_80115149[]; +extern u8 D_80115158[]; +extern u8 D_8011514D; +extern u8 D_8011515C; +extern s32 func_800D11F0(s32 a0); +extern s32 func_800D1658(s32 a0); +extern s32 func_801416D4(s16 param_1); +extern void func_8001903C(void); +extern void func_801417C4(void); +extern u8 D_800B9A16; +extern u16 D_80115114; +extern void func_801417F8(void); +extern void func_800D24A0(int); +extern void func_8002D4C8(int, int); +extern void func_80141C0C(int); +extern s32 func_801418F8(void); +extern s32 func_80141A60(); +extern void func_8013FAF8(s16, s16); +extern s32 D_801151D0; +extern u16 D_80115116; +extern void func_80141B90(void); +extern void func_80141C0C(s32 param_1); +extern s32 func_80015144(void); +extern unsigned char D_80112C04[]; +extern unsigned char D_80112C50[]; +extern unsigned char D_80112C9C[]; +extern unsigned char D_80112CE8[]; +extern unsigned char D_80112D38[]; +extern unsigned char D_80112D78[]; +extern unsigned char D_80112DBC[]; +extern unsigned char D_80112DF4[]; +extern unsigned char D_80112E14[]; +extern unsigned char D_80112E40[]; +extern unsigned char D_80112E6C[]; +extern unsigned char D_80112EBC[]; +extern unsigned char D_80112F0C[]; +extern unsigned char D_80112F48[]; +extern unsigned char D_80112F9C[]; +extern unsigned char D_80112FDC[]; +extern unsigned char D_8011302C[]; +extern unsigned char D_80113074[]; +extern unsigned char D_801130B8[]; +extern unsigned char D_801130E8[]; +extern unsigned char D_80113138[]; +extern unsigned char D_8011317C[]; +extern unsigned char D_801131A8[]; +extern unsigned char D_801131E8[]; +extern unsigned char D_80113214[]; +extern unsigned char D_80113254[]; +extern unsigned char D_80113278[]; +extern unsigned char D_801132B8[]; +extern unsigned char D_801132E4[]; +extern unsigned char D_80113324[]; +extern unsigned char D_80113360[]; +extern unsigned char D_801133A4[]; +extern unsigned char D_801133F4[]; +extern unsigned char D_80113440[]; +extern unsigned char D_80113474[]; +extern unsigned char D_801134B0[]; +extern unsigned char D_801134FC[]; +extern unsigned char D_80113530[]; +extern unsigned char D_80113554[]; +extern unsigned char D_801135A8[]; +extern unsigned char D_80113600[]; +extern unsigned char D_80113650[]; +extern unsigned char D_80113694[]; +extern unsigned char D_801136DC[]; +extern unsigned char D_80113724[]; +extern unsigned char D_80113744[]; +extern unsigned char D_80113770[]; +extern unsigned char D_80113794[]; +extern unsigned char D_801137D8[]; +extern unsigned char D_8011381C[]; +extern unsigned char D_8011383C[]; +extern unsigned char D_8011386C[]; +extern unsigned char D_801138A4[]; +extern unsigned char D_801138D0[]; +extern unsigned char D_80113900[]; +extern unsigned char D_80113944[]; +extern unsigned char D_80113964[]; +extern unsigned char D_8011399C[]; +extern unsigned char D_801139E8[]; +extern unsigned char D_80113A28[]; +extern unsigned char D_80113A50[]; +extern unsigned char D_80113A84[]; +extern unsigned char D_80113AB0[]; +extern unsigned char D_80113AE0[]; +extern unsigned char D_80113B34[]; +extern unsigned char D_80113B68[]; +extern unsigned char D_80113BA4[]; +extern unsigned char D_80113BC0[]; +extern unsigned char D_80113BF0[]; +extern unsigned char D_80113C20[]; +extern unsigned char D_80113C3C[]; +extern unsigned char D_80113C7C[]; +extern unsigned char * func_80141CA4(void); +extern void func_80142414(s32 a0, s16 a1); +extern void func_80142454(s32 a0); +extern void func_801424E4(short *param_1); +extern void func_801425CC(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern s32 func_8012AD50(void *a0); +extern void func_80142608(s32 param_1); +extern void func_801426D4(s32 a0); +extern void func_80142740(int param_1); +extern void func_80142778(u8 *a1); +extern void func_801427DC(void); +extern void func_801427E4(void); +extern void func_801427EC(int param_1); +extern s32 func_80142DB8(s32 *a0); +extern void func_80142BB4(s32 *a0, s32 a1, s32 a2); +extern void func_80142C9C(s32 *a0); +extern void func_80142838(s32 *a0); +extern s32 func_80142D38(s32 *a0); +extern void func_801428CC(s32 *a0); +extern void func_8014292C(int param_1); +extern void func_80142978(int param_1); +extern void func_801429C4(int param_1); +extern void func_80142A80(void); +extern void func_80142A10(int param_1); +extern void func_80142C84(s32 a0); +extern void func_80143994(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); +extern void func_801439C0(u8 *a0); +extern void func_80142BB4(s32* param_1, s32 param_2, s32 param_3); +extern void func_80142C7C(void); +extern void func_80142C9C(s32 * arg0); +extern void func_80142DC4(int param_1); +extern void func_80142E38(int param_1); +extern void func_80142EC0(s32 param_1); +extern void func_80142F68(s32 *a0); +extern void func_80142FFC(s32 *a0); +extern void func_8014305C(int param_1); +extern void func_801430F4(s32 *a0); +extern void func_80143188(s32 *a0); +extern int func_8001CA88(int, void *); +extern void func_800233CC(void *, unsigned short); +extern void func_801431E8(s32 param_1); +extern void func_801432FC(s32 *a0); +extern void func_80143390(s32 *a0); +extern void func_80143458(); +extern void func_801433F0(s32 a0); +extern void func_80143458(s32 param_1); +extern void func_8014358C(); +extern void func_8014350C(s32 *a0); +extern void func_8014358C(s32 param_1); +extern s32 rand(void); +extern void func_80143640(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801437D8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80143970(s32 a0); +extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); +extern s16 D_801152AC; +extern s16 D_801152AA; +extern void func_801439FC(s32 a0); +extern void func_80143B30(void *a0); +extern s32 func_80143B6C(s32 arg0, s32 arg1); +extern void func_80143BDC(u16 *a0); +extern void func_80143C38(void *a0); +extern void func_80143C74(s32 a0, s32 a1); +extern void func_80143C98(void *a0); +extern void ApplyMatrixSV(void*, Svec_801372B0*, Svec_801372B0*); +extern void func_80143D28(s32 param_1); +extern void func_80143E68(void *a0); +extern void func_80143EA4(void); +extern void func_80143EAC(void); +extern void func_80143EB4(void); +extern s32 func_8004787C(s32 a0); +extern void func_80143EBC(s32 a0); +extern void func_80144054(void *a0); +extern s32 func_80047948(s32 a0); +extern void func_80144090(s32 param_1); +extern void func_801442F8(int param_1); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80144364(int param_1); +extern void func_80144458(void *arg0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern void func_80144558(u8 *param_1); +extern void func_8014462C(u8 *a0); +extern void func_801446A4(int param_1); +extern void func_8014477C(void *param_1); +extern void func_80144880(s32 param_1); +extern void func_80144988(s32 a0); +extern void func_801449C8(void *a0); +extern void func_80144A04(s32 *a0); +extern void func_80144A2C(void *a0); +extern void func_80144A68(s32 *a0); +extern void func_80144A90(void); +extern void func_80144A98(u8 *a0); +extern int func_80144B14(int param_1); +extern void func_80144AEC(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern int func_80144B14(int param_s0); +/* ==== end §8b carried decl layer ==== */ + +void func_801458E0(void) { +} + +DEFINE_func_801458E8() /* dedup: shared engine-core @0x801458e8 (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_801849E0 block defeats the tail-merge of the two identical D_801849E0 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145934(void) { + + extern u8 D_801849E0; + extern u8 D_80184950; + extern u8 D_8018492C; + extern u8 D_80184908; + extern u8 D_801849BC; + extern u8 D_80184998; + extern u8 D_80184974; + extern u8 D_801848E4; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_801849E0; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_801849E0 load from being + * tail-merged with the v>=0x384 D_801849E0 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_80184950; + } else if (v >= 0x578) { + p = &D_8018492C; + } else if (v >= 0x514) { + p = &D_80184908; + } else if (v >= 0x384) { + p = &D_801849E0; + } else if (v >= 0x258) { + p = &D_801849BC; + } else if (v >= 0xC8) { + p = &D_80184998; + } else if (v >= 0xA) { + p = &D_80184974; + } else { + p = &D_801848E4; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + + +// @class: schedule +// @stuck: none — MATCH (else-if >= ladder + §5a cross-jump barrier in the first D_80184A70 block defeats the tail-merge of the two identical D_80184A70 loads; barrier emits zero bytes, load-bearing) + +extern s32 func_80029504(void); +extern void func_800D185C(u8 *a0); +extern void func_80145B24(void); + + +void func_80145A2C(void) { + + extern u8 D_80184A70; + extern u8 D_80184950; + extern u8 D_8018492C; + extern u8 D_80184908; + extern u8 D_80184A4C; + extern u8 D_80184A28; + extern u8 D_80184A04; + extern u8 D_801848E4; + s32 v; + void *p; + + v = func_80029504(); + if (v >= 0x6A4) { + p = &D_80184A70; + /* §5a cross-jump barrier — LOAD-BEARING: keeps this D_80184A70 load from being + * tail-merged with the v>=0x384 D_80184A70 load below (emits zero machine code). */ + __asm__ __volatile__("" ::: "memory"); + } else if (v >= 0x5DC) { + p = &D_80184950; + } else if (v >= 0x578) { + p = &D_8018492C; + } else if (v >= 0x514) { + p = &D_80184908; + } else if (v >= 0x384) { + p = &D_80184A70; + } else if (v >= 0x258) { + p = &D_80184A4C; + } else if (v >= 0xC8) { + p = &D_80184A28; + } else if (v >= 0xA) { + p = &D_80184A04; + } else { + p = &D_801848E4; + } + ((void (*)(void *))func_800D185C)(p); + func_80145B24(); +} + + +DEFINE_func_80145B24() /* dedup: shared engine-core @0x80145b24 (src/shared) */ + + +DEFINE_func_80145BF8() /* dedup: shared engine-core @0x80145bf8 (src/shared) */ + + +DEFINE_func_80145C54() /* dedup: shared engine-core @0x80145c54 (src/shared) */ + + + + +void func_80145CEC(void) { + extern int func_8001C320(); + extern s32 func_80029504(void); + extern int func_801552F4(); + extern int func_80147084(); + extern int func_80147098(); + extern int func_801470AC(); + extern int func_80149210(); + extern int func_8014BE9C(); + extern int func_8016533C(); + extern int func_801627C0(); + extern int func_80162AF4(); + extern int func_80165C78(); + extern int func_801468C8(); + extern int func_80145EE8(); + extern int func_8014C968(); + extern int func_8014C6D0(); + extern int func_80165938(); + extern int func_80153C8C(); + extern int func_800290BC(); + extern s32 D_800AFAE8; + extern s32 D_800DE2A4; + extern s32 D_801152C8; + extern s32 D_80183E58; + extern s32 * D_80126B78[1]; + extern s32 * D_800AF7C8; + extern s32 * D_80126B90; + extern s16 D_80126BB8; + extern s16 D_80126BBA; + extern s16 D_80126BBC; + extern s16 D_80126BC0; + extern s16 D_80126BC2; + extern s16 D_80126BC4; + extern s16 D_80126BC8; + extern s16 D_80126BCA; + extern s16 D_80126BCC; + extern s16 D_80126D10; + extern s16 D_80126D12; + extern s16 D_80126C4E; + extern s16 currentLocationId; + extern s32 D_8011F9C4; + extern s32 D_8012707C; + extern s32 D_8011DB10; + extern s32 D_80126B58; + + unsigned int uVar1; + s32 pad[2]; + (void)&pad; + + func_80016714(&D_80126B58, 0x254); + D_80126B78[0] = (s32 *)&D_800AFAE8; + D_800AF7C8 = (s32 *)&D_801152C8; + func_8001C320(&D_800AFAE8, &D_800DE2A4); + *(s32 *)((s32)D_80126B78[0] + 0x28) = 0x7fff7fff; + D_80126B90 = (s32 *)&D_80183E58; + *(u16 *)((s32)D_80126B78[0] + 0x18) = 0x1000; + D_80126BC8 = 0x1000; + D_80126BC0 = 0x1000; + D_80126BB8 = 0x1000; + *(u16 *)((s32)D_80126B78[0] + 0x1a) = 0x1000; + D_80126BCA = 0x1000; + D_80126BC2 = 0x1000; + D_80126BBA = 0x1000; + *(u16 *)((s32)D_80126B78[0] + 0x1c) = 0x1000; + D_80126BCC = 0x1000; + D_80126BC4 = 0x1000; + D_80126BBC = 0x1000; + D_80126D12 = 0x1000; + D_80126D10 = 0x1000; + D_80126C4E = 0x1000; + func_801552F4(&D_80126B58); + func_80147084(&D_80126B58); + func_80147098(&D_80126B58); + func_801470AC(&D_80126B58); + *(u16 *)((s32)D_80126B78[0] + 0x2c) = *(u16 *)((s32)D_80126B78[0] + 0x2c) | 0x50; + func_80149210(&D_80126B58, 8); + func_8014BE9C(); + func_8016533C(); + func_801627C0(); + func_80162AF4(); + func_80165C78(); + func_801468C8(&D_80126B58, 1); + if (currentLocationId != 0x30a2 && currentLocationId != 0x30a5) { + func_80145EE8(0); + } + func_8014C968(); + func_8014C6D0(); + D_8011F9C4 = 0; + func_80165938(); + func_80153C8C(); + D_8012707C = 0; + D_8011DB10 = 0; + uVar1 = ((int (*)())func_80029504)(); + if (uVar1 >= 10) { + func_800290BC(); + } +} + + + + +// @class: schedule +// @stuck: branch layout — 3-way dispatch on param_1; trying switch form + +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); + + +void func_80145EE8(s32 param_1) +{ + + extern unsigned char D_80183E68[]; + extern unsigned char D_80183E98[]; + extern unsigned char D_80183EE8[]; + extern unsigned char D_80183F18[]; + extern unsigned char D_80183F48[]; + switch (param_1) { + case 0: + if (((unsigned char (*)(int))func_80029178)(0x1F) != 0) { + ((void (*)(void *))func_80146014)(D_80183E68); + } + if (((unsigned char (*)(int))func_80029178)(0x21) != 0) { + ((void (*)(void *))func_80146014)(D_80183E98); + } + if (((unsigned char (*)(int))func_80029178)(0x1E) != 0) { + ((void (*)(void *))func_80146014)(D_80183EE8); + } + if (((unsigned char (*)(int))func_80029178)(0x1D) != 0) { + ((void (*)(void *))func_80146014)(D_80183F18); + } + if (((unsigned char (*)(int))func_80029178)(0x20) == 0) { + return; + } + ((void (*)(void *))func_80146014)(D_80183F48); + break; + case 1: + ((void (*)(void *))func_80146014)(D_80183E68); + ((void (*)(void *))func_80146014)(D_80183E98); + ((void (*)(void *))func_80146014)(D_80183EE8); + ((void (*)(void *))func_80146014)(D_80183F18); + ((void (*)(void *))func_80146014)(D_80183F48); + break; + } +} + + +DEFINE_func_80146014() /* dedup: shared engine-core @0x80146014 (src/shared) */ + + +void func_80146074(void) { +} + + +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(); + +void func_8014607C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146128\n" + "lui $at, %%hi(D_8019A898)\n" + "sw $v0, %%lo(D_8019A898)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A898)\n" + "lw $v0, %%lo(D_8019A898)($v0)\n" + "nop\n" + "beqz $v0, .L80146114\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_80146360\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "addu $t0, $v1, $zero\n" + "sw $sp, 0($t0)\n" + "addiu $t0, $t0, -4\n" + "addu $sp, $t0, $zero\n" + "jal func_801463A0\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + ".L80146114:\n" + "nop\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +s32 func_80146128(void) +{ + + extern s32 D_80126B58; + extern s32 *D_80126B78; + extern u8 D_80078EC1; + extern s32 D_80078EC8; + extern s32 D_80126B9C; + extern s32 D_8011F730; + extern u16 D_801152B8; + extern u16 D_8012693A; + extern u8 D_80126BE0[]; + extern u8 D_801150F0[]; + register s32 base __asm__("$16"); + register s32 *p __asm__("$17"); + p = D_80126B78; + base = (s32)&D_80126B58; + func_80146FC4(base); + memcpy((void *)D_801150F0, (void *)D_80126BE0, 8); + func_80150A70(base); + ((void (*)(s32))func_80147098)(base); + func_8014A638(base); + D_8011F730 = 0; + D_801152B8 = 0; + D_8012693A = 0; + if (D_80078EC1 == 0x10 && D_80078EC8 != 0) { + *(u16 *)((s32)p + 2) = 6; + D_80126B9C |= 0x800; + } else { + *(u16 *)((s32)p + 2) = 1; + *(s32 *)(base + 0x44) &= ~0x800; + } + if (*(s32 *)(base + 0x1B0) != 0) { + *(s32 *)(base + 0x1B0) = *(s32 *)(base + 0x1B0) - 1; + } + if (func_80155458(base) == 0 && (*(s32 *)(base + 0x44) & 0x4000000) == 0) { + if ((func_80029104() & 0xFF) != 0) { + func_8014ADE0(base); + func_8014B350(base); + ((void (*)(s32))func_8014B7A4)(base); + ((void (*)(s32))func_80161D58)(base); + } + func_80029344(); + func_80161A90(base); + ((void (*)(s32))func_8014B504)(base); + func_80149BEC(base); + ((void (*)(s32))func_8014B5D0)(base); + ((void (*)(s32))func_8014C99C)(base); + func_8014B190(base); + func_80148648(base, 0); + ((void (*)(s32))func_80149228)(base); + func_8014A59C(base); + ((void (*)(s32))func_8016F14C)(base); + ((void (*)(s32))func_80154418)(base); + func_80154BE4(base); + func_80165694(base); + func_801654A8(base); + func_8014A680(base); + func_8014A6A8(base); + func_8014A71C(base); + ((void (*)(s32))func_80172588)(base); + ((void (*)(s32))func_801473DC)(base); + ((void (*)(s32, s32))func_80015978)(base + 4, base + 0x98); + return 1; + } + ((void (*)(s32, s32))func_80015978)(base + 4, base + 0x98); + return 0; +} + + +extern u8 D_80126BA4; +extern void (*D_80183F98[])(void *); + +void func_80146360(void) +{ + /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every + LATER function in this TU, which blocks a byte-true decl of a different type. + Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ + extern s32 D_80126B58; + D_80183F98[D_80126BA4](&D_80126B58); +} + + + + + + + /* size 8, align 1 -> unaligned block move */ + +DEFINE_func_801463A0() /* dedup: shared engine-core @0x801463A0 (src/shared) */ + + +DEFINE_func_80146534() /* dedup: shared engine-core @0x80146534 (src/shared) */ + + +DEFINE_func_80146554() /* dedup: shared engine-core @0x80146554 (src/shared) */ + + +DEFINE_func_80146578() /* dedup: shared engine-core @0x80146578 (src/shared) */ + + +DEFINE_func_8014659C() /* dedup: shared engine-core @0x8014659c (src/shared) */ + + +DEFINE_func_801465C0() /* dedup: shared engine-core @0x801465c0 (src/shared) */ + + +DEFINE_func_801465E4() /* dedup: shared engine-core @0x801465e4 (src/shared) */ + + +DEFINE_func_80146608() /* dedup: shared engine-core @0x80146608 (src/shared) */ + + +DEFINE_func_801466B4() /* dedup: shared engine-core @0x801466b4 (src/shared) */ + + +DEFINE_func_801466F0() /* dedup: shared engine-core @0x801466f0 (src/shared) */ + + +DEFINE_func_80146750() /* dedup: shared engine-core @0x80146750 (src/shared) */ + +DEFINE_func_8014680C() /* dedup: shared engine-core @0x8014680c (src/shared) */ + + +DEFINE_func_801468C8() /* dedup: shared engine-core @0x801468c8 (src/shared) */ + + +DEFINE_func_80146924() /* dedup: shared engine-core @0x80146924 (src/shared) */ + + +DEFINE_func_80146994() /* dedup: shared engine-core @0x80146994 (src/shared) */ + + +DEFINE_func_801469C8() /* dedup: shared engine-core @0x801469c8 (src/shared) */ + + + +extern void func_80146AFC(void*); +void aF80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6) __asm__("func_80146A6C"); +void aF80146A6C(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6) +{ + u8 sp[0x18]; + *(s16 *)(sp + 0x0) = a0; + *(s32 *)(sp + 0x8) = a1; + *(s16 *)(sp + 0x2) = a2; + *(s16 *)(sp + 0x4) = a3; + *(s16 *)(sp + 0x6) = a4; + *(s32 *)(sp + 0xC) = a5; + *(s32 *)(sp + 0x10) = a6; + ((s32 (*)(void *))func_80146AFC)(sp); +} + + +DEFINE_func_80146AB4() /* dedup: shared engine-core @0x80146ab4 (src/shared) */ + + +extern s32 func_80146B9C(void * arg0); + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_80146AFC; + +/* func_80146AFC — ASCENDING twin of the byte-proven DEFINE_func_80146B9C() + * in src/shared/engine_core.h (cookbook §71: find the already-matched sibling first). + * Same 0x58-stride slot table (base D_8011D030), same 7-store copy body in the same + * order, same $a2/$a1 giv pair. 80146B9C walks DOWN; this one walks UP, so the guard + * is `p < end`, end = p + 0xA50 (30 slots x 0x58). + * + * DECAY ROOT CAUSE (this redraft): the stored backlog draft had been rewritten to + * `void func_80146AFC(...)`, which drops BOTH `return 0` paths' `addu $v0,$zero,$zero` + * and the hit path's `j .L80146B94` => LENGTH-DRIFT -2 (38 vs 40) plus $v0/$v1 regalloc + * drift on the final lw/sw pair. Restoring the s32 return type (the fleet spelling the + * banked sibling func_80146B9C already uses) restores MATCH at 40/40. + * + * RECONCILE (2026-08-01) — the whole-binary gate failed with + * ov_SC01_077_after.c:592: conflicting types for `D_8011D030' (previous decl :564) + * TWO file-scope collisions were present; both are fixed HERE, with NO edit to + * src/shared/engine_core.h and NO change to the generated code (re-verified MATCH + * after each step): + * + * 1. D_8011D030 (the reported one). DEFINE_func_801469C8() emits + * `extern s32 D_8011D030;` at FILE scope (engine_core.h:10811, above the + * `s32 func_801469C8(...) {` line), and this TU expands that macro at :564 — + + extern s32 D_8011D030; + * i.e. before the splice point :570. The draft's `extern u16` therefore + * redeclared it incompatibly at :592. Conformed to the TU's `extern s32`. + * Codegen-neutral: the sole use is `(u8 *)&D_8011D030`, an address-of, so the + * declared object type never reaches a load/store width (cookbook §20). + * + * 2. func_80146AFC ITSELF (latent, would have surfaced next). DEFINE_func_8014C010() + * (:13510) and DEFINE_func_8014AD30() (:13524) each emit a file-scope + * `extern void func_80146AFC(void *a0);`, and this TU expands them at :1386 and + * :1541 — after the splice — so an `s32 func_80146AFC` definition collides on the + * RETURN axis. Fixed with the §37/§124 ASM-LABEL ALIAS: the C identifier is + * aF80146AFC, the emitted label is func_80146AFC, so the canonical void decl and + * this s32 definition never share a namespace. Callers discard the result, so the + * void-typed call sites stay codegen-identical. + * + * Both were reproduced and then cleared against the real cpp+cc1-2.7.2 pair using a + * synthetic copy of this TU's declaration environment (.run/uc2/_recon_probe_80146AFC.c): + * the pre-reconcile spelling emits exactly the gate's error pair; the spelling below + * compiles clean. + * + * ORACLE: tools/match_one.py func_80146AFC --c .run/uc2/func_80146AFC.c + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_after -> MATCH (40 ins) + */ + + +s32 aF80146AFC(void *arg0) __asm__("func_80146AFC"); + +s32 aF80146AFC(void *arg0) +{ + register u8 *p __asm__("$6"); + register u8 *q __asm__("$5"); + u8 *end; + p = (u8 *)&D_8011D030; + end = p + 0xA50; + if ((u32)p < (u32)end) { + q = p + 0x30; + do { + if (*(u16 *)p == 0) { + *(s32 *)(q + 0x4) = *(s32 *)((u8 *)arg0 + 0x8); + *(s16 *)p = *(u16 *)((u8 *)arg0 + 0x0); + *(s16 *)(q - 0x2A) = *(u16 *)((u8 *)arg0 + 0x2); + *(s16 *)(q - 0x26) = *(u16 *)((u8 *)arg0 + 0x4); + *(s16 *)(q - 0x22) = *(u16 *)((u8 *)arg0 + 0x6); + *(s32 *)(q - 0x4) = *(s32 *)((u8 *)arg0 + 0xC); + *(s32 *)(q + 0x0) = *(s32 *)((u8 *)arg0 + 0x10); + return (s32)p; + } + p += 0x58; + q += 0x58; + } while ((u32)p < (u32)end); + } + return 0; +} + + +DEFINE_func_80146B9C() /* dedup: shared engine-core @0x80146b9c (src/shared) */ + + +DEFINE_func_80146C3C() /* dedup: shared engine-core @0x80146c3c (src/shared) */ + + +DEFINE_func_80146C98() /* dedup: shared engine-core @0x80146c98 (src/shared) */ + + +DEFINE_func_80146CA0() /* dedup: shared engine-core @0x80146ca0 (src/shared) */ + + +DEFINE_func_80146CB4() /* dedup: shared engine-core @0x80146cb4 (src/shared) */ + + +DEFINE_func_80146CC8() /* dedup: shared engine-core @0x80146cc8 (src/shared) */ + + +DEFINE_func_80146D30() /* dedup: shared engine-core @0x80146d30 (src/shared) */ + + +DEFINE_func_80146D80() /* dedup: shared engine-core @0x80146d80 (src/shared) */ + + +DEFINE_func_80146D90() /* dedup: shared engine-core @0x80146d90 (src/shared) */ + + +DEFINE_func_80146DB8() /* dedup: shared engine-core @0x80146db8 (src/shared) */ + + +DEFINE_func_80146DE8() /* dedup: shared engine-core @0x80146de8 (src/shared) */ + + +DEFINE_func_80146DF8() /* dedup: shared engine-core @0x80146df8 (src/shared) */ + + +DEFINE_func_80146E90() /* dedup: shared engine-core @0x80146e90 (src/shared) */ + + +DEFINE_func_80146E98() /* dedup: shared engine-core @0x80146e98 (src/shared) */ + + +DEFINE_func_80146EC0() /* dedup: shared engine-core @0x80146ec0 (src/shared) */ + + +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void*, Svec_801372B0*, Svec_801372B0*); +void func_80146F58(s32 a0, s32 a1) { + s16 vec[3]; + u8 mat[0x20]; + vec[0] = func_8012A68C(); + vec[1] = func_8012A758(); + vec[2] = 0; + func_8004978C(vec, mat); + ((void (*)(void *, void *, void *))ApplyMatrixSV)(mat, (void *)a0, (void *)a1); +} + + +extern void func_80015954(s32 a0, s32 a1); +extern void *memcpy(void *dst, const void *src, u32 n); +void func_80146FC4(s32 a0) { + + extern u8 D_80126DB0[]; + extern u16 D_80126DB6; + s32 s1 = a0; + s32 s0; + if (*(s16 *)(s1 + 0xA) >= 0x401) { + s0 = (s32)D_80126DB0; + func_80015954(s0, s1 + 0x4); + memcpy((void *)(s1 + 0x88), (void *)s0, 8); + *(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = D_80126DB6; + } +} + + +DEFINE_func_8014704C() /* dedup: shared engine-core @0x8014704c (src/shared) */ + + +DEFINE_func_80147054() /* dedup: shared engine-core @0x80147054 (src/shared) */ + + +DEFINE_func_80147060() /* dedup: shared engine-core @0x80147060 (src/shared) */ + + +DEFINE_func_8014706C() /* dedup: shared engine-core @0x8014706c (src/shared) */ + + +DEFINE_func_80147078() /* dedup: shared engine-core @0x80147078 (src/shared) */ + + +DEFINE_func_80147084() /* dedup: shared engine-core @0x80147084 (src/shared) */ + + +DEFINE_func_8014708C() /* dedup: shared engine-core @0x8014708c (src/shared) */ + + +DEFINE_func_80147098() /* dedup: shared engine-core @0x80147098 (src/shared) */ + + +DEFINE_func_801470A0() /* dedup: shared engine-core @0x801470a0 (src/shared) */ + + +DEFINE_func_801470AC() /* dedup: shared engine-core @0x801470ac (src/shared) */ + + +DEFINE_func_801470B4() /* dedup: shared engine-core @0x801470b4 (src/shared) */ + + +DEFINE_func_801470C0() /* dedup: shared engine-core @0x801470c0 (src/shared) */ + + +DEFINE_func_80147118() /* dedup: shared engine-core @0x80147118 (src/shared) */ + + +DEFINE_func_80147264() /* dedup: shared engine-core @0x80147264 (src/shared) */ + + +DEFINE_func_80147290() /* dedup: shared engine-core @0x80147290 (src/shared) */ + + +DEFINE_func_801472B4() /* dedup: shared engine-core @0x801472b4 (src/shared) */ + + +DEFINE_func_801472C8() /* dedup: shared engine-core @0x801472c8 (src/shared) */ + + +DEFINE_func_801472DC() /* dedup: shared engine-core @0x801472dc (src/shared) */ + + +DEFINE_func_801472F0() /* dedup: shared engine-core @0x801472f0 (src/shared) */ + + +DEFINE_func_80147300() /* dedup: shared engine-core @0x80147300 (src/shared) */ + + +DEFINE_func_80147324() /* dedup: shared engine-core @0x80147324 (src/shared) */ + + +DEFINE_func_80147364() /* dedup: shared engine-core @0x80147364 (src/shared) */ + + +DEFINE_func_801473DC() /* dedup: shared engine-core @0x801473dc (src/shared) */ + + +DEFINE_func_801473EC() /* dedup: shared engine-core @0x801473ec (src/shared) */ + + +DEFINE_func_80147460() /* dedup: shared engine-core @0x80147460 (src/shared) */ + + +DEFINE_func_80147478() /* dedup: shared engine-core @0x80147478 (src/shared) */ + + +DEFINE_func_801474D8() /* dedup: shared engine-core @0x801474d8 (src/shared) */ + + +DEFINE_func_801474EC() /* dedup: shared engine-core @0x801474ec (src/shared) */ + + +DEFINE_func_80147514() /* dedup: shared engine-core @0x80147514 (src/shared) */ + + +DEFINE_func_80147628() /* dedup: shared engine-core @0x80147628 (src/shared) */ + + +DEFINE_func_80147718() /* dedup: shared engine-core @0x80147718 (src/shared) */ + + +DEFINE_func_80147788() /* dedup: shared engine-core @0x80147788 (src/shared) */ + + +DEFINE_func_801477A8() /* dedup: shared engine-core @0x801477a8 (src/shared) */ + + +DEFINE_func_801477C8() /* dedup: shared engine-core @0x801477c8 (src/shared) */ + + +DEFINE_func_801477E8() /* dedup: shared engine-core @0x801477e8 (src/shared) */ + + +DEFINE_func_80147814() /* dedup: shared engine-core @0x80147814 (src/shared) */ + + +DEFINE_func_80147860() /* dedup: shared engine-core @0x80147860 (src/shared) */ + + +DEFINE_func_801478B8() /* dedup: shared engine-core @0x801478b8 (src/shared) */ + + +DEFINE_func_80147928() /* dedup: shared engine-core @0x80147928 (src/shared) */ + + +DEFINE_func_80147948() /* dedup: shared engine-core @0x80147948 (src/shared) */ + + +DEFINE_func_8014799C() /* dedup: shared engine-core @0x8014799c (src/shared) */ + + +DEFINE_func_801479BC() /* dedup: shared engine-core @0x801479bc (src/shared) */ + + +DEFINE_func_80147A10() /* dedup: shared engine-core @0x80147a10 (src/shared) */ + + +DEFINE_func_80147A30() /* dedup: shared engine-core @0x80147a30 (src/shared) */ + + +DEFINE_func_80147A84() /* dedup: shared engine-core @0x80147a84 (src/shared) */ + + +DEFINE_func_80147AAC() /* dedup: shared engine-core @0x80147aac (src/shared) */ + + +DEFINE_func_80147AD4() /* dedup: shared engine-core @0x80147ad4 (src/shared) */ + + +DEFINE_func_80147B18() /* dedup: shared engine-core @0x80147b18 (src/shared) */ + + +DEFINE_func_80147B5C() /* dedup: shared engine-core @0x80147b5c (src/shared) */ + + +DEFINE_func_80147C30() /* dedup: shared engine-core @0x80147c30 (src/shared) */ + + +DEFINE_func_80147CC8() /* dedup: shared engine-core @0x80147cc8 (src/shared) */ + + +DEFINE_func_80147D38() /* dedup: shared engine-core @0x80147d38 (src/shared) */ + + +DEFINE_func_80147DC0() /* dedup: shared engine-core @0x80147dc0 (src/shared) */ + + +DEFINE_func_80147E44() /* dedup: shared engine-core @0x80147e44 (src/shared) */ + + +DEFINE_func_80147F50() /* dedup: shared engine-core @0x80147f50 (src/shared) */ + + +DEFINE_func_80147F78() /* dedup: shared engine-core @0x80147f78 (src/shared) */ + + +DEFINE_func_80148038() /* dedup: shared engine-core @0x80148038 (src/shared) */ + + +DEFINE_func_80148094() /* dedup: shared engine-core @0x80148094 (src/shared) */ + + +DEFINE_func_801483E8() /* dedup: shared engine-core @0x801483e8 (src/shared) */ + + +DEFINE_func_801484B0() /* dedup: shared engine-core @0x801484b0 (src/shared) */ + + +DEFINE_func_801484E8() /* dedup: shared engine-core @0x801484e8 (src/shared) */ + + +DEFINE_func_80148534() /* dedup: shared engine-core @0x80148534 (src/shared) */ + + +DEFINE_func_8014856C() /* dedup: shared engine-core @0x8014856c (src/shared) */ + + +DEFINE_func_801485B8() /* dedup: shared engine-core @0x801485b8 (src/shared) */ + + +DEFINE_func_80148634() /* dedup: shared engine-core @0x80148634 (src/shared) */ + + +DEFINE_func_80148648() /* dedup: shared engine-core @0x80148648 (src/shared) */ + + +DEFINE_func_801487F4() /* dedup: shared engine-core @0x801487f4 (src/shared) */ + + +DEFINE_func_80148800() /* dedup: shared engine-core @0x80148800 (src/shared) */ + + +DEFINE_func_8014880C() /* dedup: shared engine-core @0x8014880c (src/shared) */ + + +DEFINE_func_80148818() /* dedup: shared engine-core @0x80148818 (src/shared) */ + + +DEFINE_func_80148824() /* dedup: shared engine-core @0x80148824 (src/shared) */ + + +DEFINE_func_801488A8() /* dedup: shared engine-core @0x801488a8 (src/shared) */ + + +DEFINE_func_8014891C() /* dedup: shared engine-core @0x8014891c (src/shared) */ + + +DEFINE_func_80148980() /* dedup: shared engine-core @0x80148980 (src/shared) */ + + +DEFINE_func_801489E8() /* dedup: shared engine-core @0x801489e8 (src/shared) */ + + +DEFINE_func_80148A48() /* dedup: shared engine-core @0x80148a48 (src/shared) */ + + +DEFINE_func_80148AAC() /* dedup: shared engine-core @0x80148aac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (71 ins). switch binary-tree; s1 angle = pin-source-of-copy ($5 temp + retie); 2nd-block double-load + 0x80-clobber via $v1/$v0/$a0 pins + lazy hi-pin reusing dead c80 reg + +extern s32 ratan2(s32 a0, s32 a1); + +int func_80148AFC(void *a0) { + + extern s32 D_801151D4; + extern ActorFn D_80183FA0[]; + s32 p = (s32)a0; + s32 iVar5 = *(s32 *)(p + 0x20); + register s32 tmp __asm__("$5") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 sVar3; + u8 bVar1; + __asm__("" : "=r"(tmp) : "0"(tmp)); + sVar3 = tmp; + bVar1 = *(u8 *)(p + 0xA9); + + switch (bVar1) { + case 0x41: + return D_80183FA0[*(u16 *)(p + 0xAA) >> 12](a0) & 0xFF; + case 0x53: + case 0x73: + { + register u32 bb __asm__("$3"); + register s32 c80 __asm__("$2") = 0x80; + register s32 lo __asm__("$4"); + register s32 hi __asm__("$2"); + bb = *(u16 *)(p + 0xAE); + lo = bb & 0xFF; + if (lo != c80 || (hi = bb >> 8) != 0x80) { + s32 sVar4; + __asm__ __volatile__("" : : : "memory"); + sVar4 = ratan2((*(u16 *)(p + 0xAE) & 0xFF) - 0x80, 0x80 - (*(u16 *)(p + 0xAE) >> 8)); + *(u16 *)(iVar5 + 0x12) = (sVar3 + sVar4) & 0xFFF; + return 1; + } + return 0; + } + } +} + + +DEFINE_func_80148C18() /* dedup: shared engine-core @0x80148c18 (src/shared) */ + + +DEFINE_func_80148C20() /* dedup: shared engine-core @0x80148c20 (src/shared) */ + + +DEFINE_func_80148C34() /* dedup: shared engine-core @0x80148c34 (src/shared) */ + + +DEFINE_func_80148C4C() /* dedup: shared engine-core @0x80148c4c (src/shared) */ + + +DEFINE_func_80148C64() /* dedup: shared engine-core @0x80148c64 (src/shared) */ + + +DEFINE_func_80148C7C() /* dedup: shared engine-core @0x80148c7c (src/shared) */ + + +DEFINE_func_80148C84() /* dedup: shared engine-core @0x80148c84 (src/shared) */ + + +DEFINE_func_80148C9C() /* dedup: shared engine-core @0x80148c9c (src/shared) */ + + +DEFINE_func_80148CB4() /* dedup: shared engine-core @0x80148cb4 (src/shared) */ + + +DEFINE_func_80148CCC() /* dedup: shared engine-core @0x80148ccc (src/shared) */ + + +DEFINE_func_80148CE4() /* dedup: shared engine-core @0x80148ce4 (src/shared) */ + + +DEFINE_func_80148CEC() /* dedup: shared engine-core @0x80148cec (src/shared) */ + + +DEFINE_func_80148CF4() /* dedup: shared engine-core @0x80148cf4 (src/shared) */ + + +DEFINE_func_80148D0C() /* dedup: shared engine-core @0x80148d0c (src/shared) */ + + +DEFINE_func_80148D24() /* dedup: shared engine-core @0x80148d24 (src/shared) */ + + +DEFINE_func_80148D3C() /* dedup: shared engine-core @0x80148d3c (src/shared) */ + + + +// @class: schedule +// @stuck: none — MATCH (68 ins) +extern s32 ratan2(s32 a0, s32 a1); + +s32 func_80148D44(void) { + + extern s32 D_801151D4; + extern u8 D_80126C01; + extern u16 D_80126C02; + extern u16 D_80126C06; + extern s32 D_80183FE0[]; + register s32 ang __asm__("$16"); + register s32 a __asm__("$4"); + s32 p; + s32 res; + s32 d; + + p = D_801151D4; + a = (ratan2(*(s32 *)(p + 0x44) - *(s32 *)(p + 0x50), + *(s32 *)(p + 0x48) - *(s32 *)(p + 0x3c)) - 0x400) & 0xFFF; + d = (s32)D_80126C01; + __asm__ __volatile__("" : : "r"(a)); + ang = a; + if (d == 0x53) { + goto final; + } + if (d < 0x54) { + if (d == 0x41) { + goto call; + } + return 0x41; + } + if (d != 0x73) { + return 0x73; + } + goto final; +call: + return (s32)(s16)((s16 (*)())(D_80183FE0[D_80126C02 >> 0xc]))(); +final: + { + u32 e = D_80126C06; + if (((e & 0xff) == 0x80) && ((e >> 8) == (e & 0xff))) { + return -1; + } + __asm__ __volatile__("" : : : "memory"); + res = (ang + ratan2((D_80126C06 & 0xff) - 0x80, 0x80 - (D_80126C06 >> 8))) & 0xFFF; + } + return res; +} + + + +extern s32 ratan2(s32, s32); +/* derived from asm: lui/addu/lw %lo(D_80184020) indexed by (u16>>12)*4, then jalr with no args; + * the result is sign-extended from 16 bits => the table's functions return s16. */ + +s32 func_80148E54(s32 arg0) { + + extern s32 D_801151D4; + extern s16 (*D_80184020[])(); + register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50), + *(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF; + s32 ang; + __asm__("" : "=r"(tmp) : "0"(tmp)); + ang = tmp; + + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + return D_80184020[*(u16 *)(arg0 + 0xAA) >> 12](); + case 0x53: + case 0x73: + if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) { + return -1; + } + return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80, + 0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF; + } +} + + +DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */ + + +DEFINE_func_80148F68() /* dedup: shared engine-core @0x80148f68 (src/shared) */ + + +DEFINE_func_80148F74() /* dedup: shared engine-core @0x80148f74 (src/shared) */ + + +DEFINE_func_80148F80() /* dedup: shared engine-core @0x80148f80 (src/shared) */ + + +DEFINE_func_80148F8C() /* dedup: shared engine-core @0x80148f8c (src/shared) */ + + +DEFINE_func_80148F98() /* dedup: shared engine-core @0x80148f98 (src/shared) */ + + +DEFINE_func_80148FA0() /* dedup: shared engine-core @0x80148fa0 (src/shared) */ + + +DEFINE_func_80148FAC() /* dedup: shared engine-core @0x80148fac (src/shared) */ + + +DEFINE_func_80148FB8() /* dedup: shared engine-core @0x80148fb8 (src/shared) */ + + +DEFINE_func_80148FC4() /* dedup: shared engine-core @0x80148fc4 (src/shared) */ + + +DEFINE_func_80148FD0() /* dedup: shared engine-core @0x80148fd0 (src/shared) */ + + +DEFINE_func_80148FD8() /* dedup: shared engine-core @0x80148fd8 (src/shared) */ + + +DEFINE_func_80148FE0() /* dedup: shared engine-core @0x80148fe0 (src/shared) */ + + +DEFINE_func_80148FEC() /* dedup: shared engine-core @0x80148fec (src/shared) */ + + +DEFINE_func_80148FF8() /* dedup: shared engine-core @0x80148ff8 (src/shared) */ + + +DEFINE_func_80149004() /* dedup: shared engine-core @0x80149004 (src/shared) */ + + +DEFINE_func_8014900C() /* dedup: shared engine-core @0x8014900c (src/shared) */ + + +DEFINE_func_80149020() /* dedup: shared engine-core @0x80149020 (src/shared) */ + + +DEFINE_func_80149034() /* dedup: shared engine-core @0x80149034 (src/shared) */ + + +DEFINE_func_80149048() /* dedup: shared engine-core @0x80149048 (src/shared) */ + + +DEFINE_func_8014905C() /* dedup: shared engine-core @0x8014905c (src/shared) */ + + +DEFINE_func_80149078() /* dedup: shared engine-core @0x80149078 (src/shared) */ + + +DEFINE_func_801490E0() /* dedup: shared engine-core @0x801490e0 (src/shared) */ + + +DEFINE_func_801490E8() /* dedup: shared engine-core @0x801490e8 (src/shared) */ + + +DEFINE_func_801490F0() /* dedup: shared engine-core @0x801490f0 (src/shared) */ + + +DEFINE_func_801490F8() /* dedup: shared engine-core @0x801490f8 (src/shared) */ + + +DEFINE_func_80149184() /* dedup: shared engine-core @0x80149184 (src/shared) */ + + +DEFINE_func_801491C4() /* dedup: shared engine-core @0x801491c4 (src/shared) */ + + +DEFINE_func_80149204() /* dedup: shared engine-core @0x80149204 (src/shared) */ + + +DEFINE_func_80149210() /* dedup: shared engine-core @0x80149210 (src/shared) */ + + +DEFINE_func_80149228() /* dedup: shared engine-core @0x80149228 (src/shared) */ + + +DEFINE_func_80149284() /* dedup: shared engine-core @0x80149284 (src/shared) */ + + +DEFINE_func_80149290() /* dedup: shared engine-core @0x80149290 (src/shared) */ + + +DEFINE_func_80149350() /* dedup: shared engine-core @0x80149350 (src/shared) */ + + +DEFINE_func_80149374() /* dedup: shared engine-core @0x80149374 (src/shared) */ + + +DEFINE_func_801493D0() /* dedup: shared engine-core @0x801493d0 (src/shared) */ + + +DEFINE_func_8014942C() /* dedup: shared engine-core @0x8014942c (src/shared) */ + + +DEFINE_func_80149450() /* dedup: shared engine-core @0x80149450 (src/shared) */ + + +DEFINE_func_801494CC() /* dedup: shared engine-core @0x801494cc (src/shared) */ + + +void func_8012F14C(s32 a0, s32 a1, s32 a2); +void func_8012EF70(s32 a0, s32 a1); + +void func_80149544(s32 a0, s32 a1, s32 a2) +{ + s32 buffer[2]; + + func_8012F14C(*(s32 *)(a0 + 0x20) + 0x34, a1, (s32)buffer); + func_8012EF70((s32)buffer, a2); +} + + +void func_8012F14C(s32 a0, s32 a1, s32 a2); +void func_8012EFB8(s32 a0); + +void func_80149584(s32 param_1, s32 param_2, s32 param_3) +{ + char local_var[8]; + func_8012F14C(*(s32*)(param_1 + 0x20) + 0x34, param_2, (s32)local_var); + ((void (*)(s32, s32))func_8012EFB8)((s32)local_var, param_3); +} + + +DEFINE_func_801495C4() /* dedup: shared engine-core @0x801495C4 (src/shared) */ + + +DEFINE_func_8014964C() /* dedup: shared engine-core @0x8014964c (src/shared) */ + + +DEFINE_func_801496D4() /* dedup: shared engine-core @0x801496d4 (src/shared) */ + + +DEFINE_func_80149704() /* dedup: shared engine-core @0x80149704 (src/shared) */ + + +DEFINE_func_80149724() /* dedup: shared engine-core @0x80149724 (src/shared) */ + + +DEFINE_func_80149744() /* dedup: shared engine-core @0x80149744 (src/shared) */ + + +DEFINE_func_80149788() /* dedup: shared engine-core @0x80149788 (src/shared) */ + + +DEFINE_func_801497A8() /* dedup: shared engine-core @0x801497a8 (src/shared) */ + + +DEFINE_func_80149864() /* dedup: shared engine-core @0x80149864 (src/shared) */ + + +DEFINE_func_80149884() /* dedup: shared engine-core @0x80149884 (src/shared) */ + + +DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */ + + +DEFINE_func_801498E0() /* dedup: shared engine-core @0x801498e0 (src/shared) */ + + +DEFINE_func_80149954() /* dedup: shared engine-core @0x80149954 (src/shared) */ + + +DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */ + + +DEFINE_func_80149AA8() /* dedup: shared engine-core @0x80149aa8 (src/shared) */ + + +DEFINE_func_80149AD4() /* dedup: shared engine-core @0x80149ad4 (src/shared) */ + + +DEFINE_func_80149B14() /* dedup: shared engine-core @0x80149b14 (src/shared) */ + + +DEFINE_func_80149B54() /* dedup: shared engine-core @0x80149b54 (src/shared) */ + + +DEFINE_func_80149BAC() /* dedup: shared engine-core @0x80149bac (src/shared) */ + + +DEFINE_func_80149BEC() /* dedup: shared engine-core @0x80149bec (src/shared) */ + + +DEFINE_func_80149C08() /* dedup: shared engine-core @0x80149c08 (src/shared) */ + + +DEFINE_func_80149C94() /* dedup: shared engine-core @0x80149c94 (src/shared) */ + + +DEFINE_func_80149CB4() /* dedup: shared engine-core @0x80149cb4 (src/shared) */ + + +DEFINE_func_80149CD4() /* dedup: shared engine-core @0x80149cd4 (src/shared) */ + + +DEFINE_func_80149D10() /* dedup: shared engine-core @0x80149d10 (src/shared) */ + + +DEFINE_func_80149D9C() /* dedup: shared engine-core @0x80149d9c (src/shared) */ + + +DEFINE_func_80149DD8() /* dedup: shared engine-core @0x80149dd8 (src/shared) */ + + +DEFINE_func_80149E94() /* dedup: shared engine-core @0x80149e94 (src/shared) */ + + +extern void func_80144A04(s32 *a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern void func_8016EDEC(s32, s32, s32); +s32 func_80149F2C(s32 a0, s32 a1) +{ + void *s1 = a0; + s32 *s0; + if (*(u16 *)a1 == 0x83 || *(u16 *)a1 == 0x61) { + s0 = (s32 *)((s32 (*)())func_80144A04)((s32 *)a1); + if (s0 != 0) { + func_801599A4(s1); + func_80159B3C(s1); + ((void (*)(s32, s32))func_8016EDEC)((s32)s0, 0x1000000); + return 1; + } + } + return 0; +} + + +void func_80149FA8(void) { +} + + +// @class: regalloc-order +// @stuck: none — MATCH (38 ins) +extern s16 currentLocationId; + +s32 func_80149FB0(s32 a0) { + + extern s32 D_80184060[]; + extern u8 D_80078E78[]; + s32 *p = &D_80184060[0]; + register s32 v __asm__("$3") = *p; + u8 *q = &D_80078E78[0]; + s32 loc; + + if (v != 0) { + loc = currentLocationId; + p = p + 1; + do { + if (loc == v) { + goto ret0; + } + v = *p; + p = p + 1; + } while (v != 0); + } + + if ((*(u32 *)(a0 + 0x44) & 0x400) != 0) { + return 0; + } + if (*(s16 *)(a0 + 0x1C8) != 0) { + return 0; + } + if ((*(u16 *)(a0 + 0xAC) & 0x100) == 0) { + ret0: + return 0; + } + v = q[0x48]; + q[0x48] = v ^ 0x80; + return 1; +} + + +DEFINE_func_8014A048() /* dedup: shared engine-core @0x8014a048 (src/shared) */ + + +DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */ + + +DEFINE_func_8014A218() /* dedup: shared engine-core @0x8014a218 (src/shared) */ + + +DEFINE_func_8014A238() /* dedup: shared engine-core @0x8014a238 (src/shared) */ + + +DEFINE_func_8014A2E4() /* dedup: shared engine-core @0x8014a2e4 (src/shared) */ + + +DEFINE_func_8014A380() /* dedup: shared engine-core @0x8014a380 (src/shared) */ + + +DEFINE_func_8014A3E0() /* dedup: shared engine-core @0x8014a3e0 (src/shared) */ + + +DEFINE_func_8014A454() /* dedup: shared engine-core @0x8014a454 (src/shared) */ + + +DEFINE_func_8014A4B4() /* dedup: shared engine-core @0x8014a4b4 (src/shared) */ + + +DEFINE_func_8014A4FC() /* dedup: shared engine-core @0x8014a4fc (src/shared) */ + + +DEFINE_func_8014A51C() /* dedup: shared engine-core @0x8014a51c (src/shared) */ + + +DEFINE_func_8014A59C() /* dedup: shared engine-core @0x8014a59c (src/shared) */ + + +DEFINE_func_8014A638() /* dedup: shared engine-core @0x8014a638 (src/shared) */ + + +DEFINE_func_8014A674() /* dedup: shared engine-core @0x8014a674 (src/shared) */ + + +DEFINE_func_8014A680() /* dedup: shared engine-core @0x8014a680 (src/shared) */ + + +DEFINE_func_8014A69C() /* dedup: shared engine-core @0x8014a69c (src/shared) */ + + +DEFINE_func_8014A6A8() /* dedup: shared engine-core @0x8014a6a8 (src/shared) */ + + +DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014a6c4 (src/shared) */ + + +DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014a71c (src/shared) */ + + + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_8014A738; + + + + + + + + +DEFINE_func_8014A738() /* dedup: shared engine-core @0x8014A738 (src/shared) */ + + +DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014a830 (src/shared) */ + + +DEFINE_func_8014A850() /* dedup: shared engine-core @0x8014a850 (src/shared) */ + + +DEFINE_func_8014AA04() /* dedup: shared engine-core @0x8014aa04 (src/shared) */ + + +DEFINE_func_8014AA28() /* dedup: shared engine-core @0x8014aa28 (src/shared) */ + + +DEFINE_func_8014AB5C() /* dedup: shared engine-core @0x8014ab5c (src/shared) */ + + +DEFINE_func_8014AB7C() /* dedup: shared engine-core @0x8014ab7c (src/shared) */ + + +DEFINE_func_8014ABF0() /* dedup: shared engine-core @0x8014abf0 (src/shared) */ + + +DEFINE_func_8014AC10() /* dedup: shared engine-core @0x8014ac10 (src/shared) */ + + +DEFINE_func_8014ACC0() /* dedup: shared engine-core @0x8014acc0 (src/shared) */ + + +DEFINE_func_8014ACE8() /* dedup: shared engine-core @0x8014ace8 (src/shared) */ + + +DEFINE_func_8014AD30() /* dedup: shared engine-core @0x8014ad30 (src/shared) */ + + +DEFINE_func_8014AD7C() /* dedup: shared engine-core @0x8014ad7c (src/shared) */ + + +DEFINE_func_8014ADA8() /* dedup: shared engine-core @0x8014ada8 (src/shared) */ + + +DEFINE_func_8014ADE0() /* dedup: shared engine-core @0x8014ade0 (src/shared) */ + + +DEFINE_func_8014B00C() /* dedup: shared engine-core @0x8014b00c (src/shared) */ + + +DEFINE_func_8014B034() /* dedup: shared engine-core @0x8014b034 (src/shared) */ + + +DEFINE_func_8014B084() /* dedup: shared engine-core @0x8014b084 (src/shared) */ + + +DEFINE_func_8014B12C() /* dedup: shared engine-core @0x8014b12c (src/shared) */ + + +DEFINE_func_8014B154() /* dedup: shared engine-core @0x8014b154 (src/shared) */ + + +DEFINE_func_8014B160() /* dedup: shared engine-core @0x8014b160 (src/shared) */ + + +DEFINE_func_8014B190() /* dedup: shared engine-core @0x8014b190 (src/shared) */ + + +DEFINE_func_8014B2A8() /* dedup: shared engine-core @0x8014b2a8 (src/shared) */ + + +DEFINE_func_8014B2D0() /* dedup: shared engine-core @0x8014b2d0 (src/shared) */ + + +DEFINE_func_8014B2F8() /* dedup: shared engine-core @0x8014b2f8 (src/shared) */ + + +DEFINE_func_8014B310() /* dedup: shared engine-core @0x8014b310 (src/shared) */ + + +DEFINE_func_8014B33C() /* dedup: shared engine-core @0x8014b33c (src/shared) */ + + +DEFINE_func_8014B350() /* dedup: shared engine-core @0x8014b350 (src/shared) */ + + +DEFINE_func_8014B4C4() /* dedup: shared engine-core @0x8014b4c4 (src/shared) */ + + +DEFINE_func_8014B4D4() /* dedup: shared engine-core @0x8014b4d4 (src/shared) */ + + +DEFINE_func_8014B504() /* dedup: shared engine-core @0x8014b504 (src/shared) */ + + +DEFINE_func_8014B598() /* dedup: shared engine-core @0x8014b598 (src/shared) */ + + +DEFINE_func_8014B5B0() /* dedup: shared engine-core @0x8014b5b0 (src/shared) */ + + +DEFINE_func_8014B5B8() /* dedup: shared engine-core @0x8014b5b8 (src/shared) */ + + +DEFINE_func_8014B5C4() /* dedup: shared engine-core @0x8014b5c4 (src/shared) */ + + +DEFINE_func_8014B5D0() /* dedup: shared engine-core @0x8014b5d0 (src/shared) */ + + +DEFINE_func_8014B5D8() /* dedup: shared engine-core @0x8014b5d8 (src/shared) */ + + +DEFINE_func_8014B6F0() /* dedup: shared engine-core @0x8014b6f0 (src/shared) */ + + +DEFINE_func_8014B768() /* dedup: shared engine-core @0x8014b768 (src/shared) */ + + +DEFINE_func_8014B7A4() /* dedup: shared engine-core @0x8014b7a4 (src/shared) */ + + +DEFINE_func_8014B944() /* dedup: shared engine-core @0x8014b944 (src/shared) */ + + +DEFINE_func_8014BB0C() /* dedup: shared engine-core @0x8014bb0c (src/shared) */ + + +DEFINE_func_8014BB24() /* dedup: shared engine-core @0x8014bb24 (src/shared) */ + + +DEFINE_func_8014BC0C() /* dedup: shared engine-core @0x8014bc0c (src/shared) */ + + +DEFINE_func_8014BC44() /* dedup: shared engine-core @0x8014bc44 (src/shared) */ + + +DEFINE_func_8014BC80() /* dedup: shared engine-core @0x8014bc80 (src/shared) */ + + +DEFINE_func_8014BCC0() /* dedup: shared engine-core @0x8014bcc0 (src/shared) */ + + +DEFINE_func_8014BCEC() /* dedup: shared engine-core @0x8014bcec (src/shared) */ + + +DEFINE_func_8014BD24() /* dedup: shared engine-core @0x8014bd24 (src/shared) */ + + +DEFINE_func_8014BD60() /* dedup: shared engine-core @0x8014bd60 (src/shared) */ + + +DEFINE_func_8014BD98() /* dedup: shared engine-core @0x8014bd98 (src/shared) */ + + +DEFINE_func_8014BDC8() /* dedup: shared engine-core @0x8014bdc8 (src/shared) */ + + +void func_8014BDE0(void) { +} + +DEFINE_func_8014BDE8() /* dedup: shared engine-core @0x8014bde8 (src/shared) */ + + +DEFINE_func_8014BE78() /* dedup: shared engine-core @0x8014be78 (src/shared) */ + + +DEFINE_func_8014BE9C() /* dedup: shared engine-core @0x8014be9c (src/shared) */ + + +DEFINE_func_8014BEC0() /* dedup: shared engine-core @0x8014bec0 (src/shared) */ + + +DEFINE_func_8014BEF8() /* dedup: shared engine-core @0x8014bef8 (src/shared) */ + + +DEFINE_func_8014BF18() /* dedup: shared engine-core @0x8014bf18 (src/shared) */ + + +DEFINE_func_8014BF48() /* dedup: shared engine-core @0x8014bf48 (src/shared) */ + + +DEFINE_func_8014BF6C() /* dedup: shared engine-core @0x8014bf6c (src/shared) */ + + +DEFINE_func_8014BF8C() /* dedup: shared engine-core @0x8014bf8c (src/shared) */ + + +DEFINE_func_8014BFB0() /* dedup: shared engine-core @0x8014bfb0 (src/shared) */ + + +DEFINE_func_8014BFD4() /* dedup: shared engine-core @0x8014bfd4 (src/shared) */ + + +DEFINE_func_8014BFF4() /* dedup: shared engine-core @0x8014bff4 (src/shared) */ + + +DEFINE_func_8014C010() /* dedup: shared engine-core @0x8014c010 (src/shared) */ + + +DEFINE_func_8014C050() /* dedup: shared engine-core @0x8014c050 (src/shared) */ + + +DEFINE_func_8014C088() /* dedup: shared engine-core @0x8014c088 (src/shared) */ + + +DEFINE_func_8014C0C8() /* dedup: shared engine-core @0x8014c0c8 (src/shared) */ + + +DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ + + +DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ + + +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern s32 D_801840E8; + +void func_8014C1A0(s32 arg0, s32 arg1) { + func_8014C1C8(arg0, arg1, &D_801840E8); +} + + +DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ + + +DEFINE_func_8014C278() /* dedup: shared engine-core @0x8014c278 (src/shared) */ + + +DEFINE_func_8014C2B0() /* dedup: shared engine-core @0x8014c2b0 (src/shared) */ + + +DEFINE_func_8014C308() /* dedup: shared engine-core @0x8014c308 (src/shared) */ + + +DEFINE_func_8014C3A4() /* dedup: shared engine-core @0x8014c3a4 (src/shared) */ + + +DEFINE_func_8014C3D0() /* dedup: shared engine-core @0x8014c3d0 (src/shared) */ + + +DEFINE_func_8014C43C() /* dedup: shared engine-core @0x8014c43c (src/shared) */ + + + +/* §37/§73/§124 asm-label alias: the fleet canon declares this `extern void` (engine_core.h, inside 8 + * DEFINE_func_* macros); the byte-true body must return s32. Aliasing the C name sidesteps the + * RETURN-axis conflict with no header edit. This line MUST travel with the body. */ +s32 aF8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4) __asm__("func_8014C4AC"); + +DEFINE_func_8014C4AC() /* dedup: shared engine-core @0x8014C4AC (src/shared) */ + + +DEFINE_func_8014C568() /* dedup: shared engine-core @0x8014c568 (src/shared) */ + + +DEFINE_func_8014C59C() /* dedup: shared engine-core @0x8014c59c (src/shared) */ + + + +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); + +s16 func_8014C5D0(s32 a0, s32 a1) { + + extern u8 D_801840F0; + return func_8014C5FC(a0, a1, &D_801840F0); +} + + +DEFINE_func_8014C5FC() /* dedup: shared engine-core @0x8014c5fc (src/shared) */ + + +DEFINE_func_8014C6AC() /* dedup: shared engine-core @0x8014c6ac (src/shared) */ + + +DEFINE_func_8014C6C0() /* dedup: shared engine-core @0x8014c6c0 (src/shared) */ + + +DEFINE_func_8014C6D0() /* dedup: shared engine-core @0x8014c6d0 (src/shared) */ + + +DEFINE_func_8014C6E0() /* dedup: shared engine-core @0x8014c6e0 (src/shared) */ + + + + + +// @class: schedule +// @stuck: none — MATCH (match_one 91/91) +// +// Levers used (all byte-gated on ov_SC07_006): +// 1. §struct 8-byte alignment-1 struct copy `*(M8_8014C6F4*)(a+0x164) = *(M8_8014C6F4*)(p+0x10)` +// -> the lwl/lwr,lwl/lwr,swl/swr,swl/swr block (engine_types.h M8_xxx convention). +// 2. §17 base-pointer cache: `u8 *p = D_80078E78;` (NOT a direct D_80078E78[0x49]) so gcc pins +// the base into callee-saved $s1 and hoists the la into the prologue (live across the jal). +// 3. §17 register pins: the search result `e` MUST be $v0 and the limit `lim` $v1, else +// local-alloc swaps the loop IV/limit pair ($v1<->$a0) and coalesces `e` into the IV. +// 4. DELAY-SLOT lever (new): writing the compare constant as its own pre-loop statement +// (`want = 0x22;`) instead of the literal `0x22` inside the loop test. With the literal, +// loop.c hoists the `li $a1,0x22` into the loop PREHEADER (after the duplicated entry test), +// so reorg.c's guard branch has nothing local to take and instead COPIES the branch-target +// insn (`addu $v0,$zero,$zero`) into its delay slot and redirects past it — a +1 shift that +// also lets the loop-back branch steal the same insn (nop -> move). Materialising the +// constant in the block BEFORE the entry test makes fill_simple_delay_slots take it from +// the preceding insns, reproducing `beqz $v0,.L8014C7F4 / addiu $a1,$zero,0x22` and leaving +// the loop-back delay slot a nop. `want` needs no pin — gcc lands it in $a1 on its own. + + +DEFINE_func_8014C6F4() /* dedup: shared engine-core @0x8014C6F4 (src/shared) */ + + +DEFINE_func_8014C860() /* dedup: shared engine-core @0x8014c860 (src/shared) */ + + +DEFINE_func_8014C88C() /* dedup: shared engine-core @0x8014c88c (src/shared) */ + + +DEFINE_func_8014C8C8() /* dedup: shared engine-core @0x8014c8c8 (src/shared) */ + + +DEFINE_func_8014C8F0() /* dedup: shared engine-core @0x8014c8f0 (src/shared) */ + + +DEFINE_func_8014C918() /* dedup: shared engine-core @0x8014c918 (src/shared) */ + + +DEFINE_func_8014C968() /* dedup: shared engine-core @0x8014c968 (src/shared) */ + + +DEFINE_func_8014C978() /* dedup: shared engine-core @0x8014c978 (src/shared) */ + + +DEFINE_func_8014C98C() /* dedup: shared engine-core @0x8014c98c (src/shared) */ + + +DEFINE_func_8014C99C() /* dedup: shared engine-core @0x8014c99c (src/shared) */ + + +DEFINE_func_8014CA00() /* dedup: shared engine-core @0x8014ca00 (src/shared) */ + + +DEFINE_func_8014CA14() /* dedup: shared engine-core @0x8014ca14 (src/shared) */ + + +DEFINE_func_8014CA70() /* dedup: shared engine-core @0x8014ca70 (src/shared) */ + + +DEFINE_func_8014CA88() /* dedup: shared engine-core @0x8014ca88 (src/shared) */ + + +DEFINE_func_8014CAE4() /* dedup: shared engine-core @0x8014cae4 (src/shared) */ + + +DEFINE_func_8014CAFC() /* dedup: shared engine-core @0x8014cafc (src/shared) */ + + +DEFINE_func_8014CB0C() /* dedup: shared engine-core @0x8014cb0c (src/shared) */ + + +DEFINE_func_8014CB1C() /* dedup: shared engine-core @0x8014cb1c (src/shared) */ + + +DEFINE_func_8014CB2C() /* dedup: shared engine-core @0x8014cb2c (src/shared) */ + + +DEFINE_func_8014CB58() /* dedup: shared engine-core @0x8014cb58 (src/shared) */ + + +DEFINE_func_8014CB68() /* dedup: shared engine-core @0x8014cb68 (src/shared) */ + + +DEFINE_func_8014CB7C() /* dedup: shared engine-core @0x8014cb7c (src/shared) */ + + +DEFINE_func_8014CB8C() /* dedup: shared engine-core @0x8014cb8c (src/shared) */ + + +DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */ + + +DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */ + + + + +extern u16 D_80126CC4; + +void func_8014CBE8(void) { + D_80126CC4 = 0; +} + + +DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */ + + +DEFINE_func_8014CC28() /* dedup: shared engine-core @0x8014cc28 (src/shared) */ + + + +extern void func_8014CD0C(u8 *a0); + +void func_8014CCB4(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014CD0C\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014CD0C() /* dedup: shared engine-core @0x8014cd0c (src/shared) */ + + +DEFINE_func_8014CD80() /* dedup: shared engine-core @0x8014cd80 (src/shared) */ + + +DEFINE_func_8014CF04() /* dedup: shared engine-core @0x8014CF04 (src/shared) */ + + + +extern void func_8014D0A4(s32); + +void func_8014D04C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014D0A4\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014D0A4() /* dedup: shared engine-core @0x8014d0a4 (src/shared) */ + + + + +DEFINE_func_8014D12C() /* dedup: shared engine-core @0x8014D12C (src/shared) */ + + + +DEFINE_func_8014D2A0() /* dedup: shared engine-core @0x8014D2A0 (src/shared) */ + + +extern int D_8019A8A0; +extern void func_8014D438(s32); + +void func_8014D3E0(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014D438\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014D438() /* dedup: shared engine-core @0x8014d438 (src/shared) */ + + +DEFINE_func_8014D4C0() /* dedup: shared engine-core @0x8014d4c0 (src/shared) */ + + + + +DEFINE_func_8014D610() /* dedup: shared engine-core @0x8014D610 (src/shared) */ + + + +extern void func_8014D790(s32); + +void func_8014D738(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014D790\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014D790() /* dedup: shared engine-core @0x8014d790 (src/shared) */ + + + typedef struct EntD820_8014D820 + { + u16 f0; + u16 f2; + u16 f4; + u16 x; + u16 f8; + u16 y; + u16 fC; + u16 z; + u8 p10[0x10]; + s32 f20; + u8 p24[0x34]; + s32 f58; + u16 f5C; + u16 f5E; + u8 p60[0x10C - 0x60]; + } Ent_8014D820; + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_8014D820; + +// @class: schedule +// @stuck: none — MATCH (304/304), symcheck SYMS-OK 12/12, and the whole-TU cc1 stage now compiles CLEAN +// +// ══════════════════════════════════════════════════════════════════════════════ +// SESSION-22 RE-DERIVATION + THE ROOT-CAUSE FIX FOR THE "ASSEMBLER-STAGE" FAILURE +// ══════════════════════════════════════════════════════════════════════════════ +// The SESSION-21 draft did reach match_one MATCH (re-verified this session, 304/304) +// and symcheck SYMS-OK — but the whole-binary build died with an opaque `Error 33` +// that was logged as "an ASSEMBLER-stage failure I did not finish diagnosing". +// +// IT IS NOT AN ASSEMBLER FAILURE. Stage-by-stage isolation of the real pipeline +// (cpp | cc1 | maspsx | as) over a scratch copy of src/ov_SC01_077/ov_SC01_077_after.c +// with this function spliced in place of its INCLUDE_ASM gives: +// cpp rc=0 +// cc1 rc=33 <-- ".../tu.c:1901: conflicting types for `Ent_8014D820'" +// "src/shared/engine_types.h:434: previous declaration of `Ent_8014D820'" +// maspsx rc=0 +// as rc=0 (only benign "used $at without .set noat" warnings) +// `33` is CC1's exit code, surfaced by the recipe's `set -o pipefail` (Makefile:560). +// Because `as` is the LAST stage in that pipe, make attributes the failure to the +// assembler — the same misread that made func_8012AAAC's "opaque Error 33" look +// assembler-shaped until it was isolated stage by stage. +// +// ROOT CAUSE: the draft declared `typedef struct Ent_8014D820 { ... } Ent_8014D820;` at FILE scope. +// `Ent_8014D820` is already a shared engine type (src/shared/engine_types.h:434, +// typedef struct { u16 guard; u16 pad; u16 field; u8 rest[14]; } Ent_8014D820; +// a 20-byte struct), pulled into every overlay TU through +// src/ov_SC01_077/../shared/engine_core.h. gcc-2.7.2 rejects the redefinition +// outright (an ERROR, not the "type mismatch with previous external decl" +// WARNING that the rest of this TU is full of), so cc1 aborts. +// +// THE FIX, and why this shape: all three helper types are now declared at BLOCK +// scope inside func_8014D820 itself. That is strictly better than renaming to +// `Ent_8014D820` at file scope, because this function is an h_seq family EXEMPLAR +// with 138 members: a file-scope type name has to stay unique against 138 distinct +// overlay TUs *and* against whatever engine_types.h grows next, while a block-scope +// typedef can never collide with anything, in any TU, ever. It also matches the +// fleet convention — src/shared/engine_core.h contains ZERO `typedef struct` +// (all 0 of them); every DEFINE_ macro body uses engine_types.h types or local ones. +// Typedefs emit no code and create no allocno, so the move is byte-neutral: +// re-verified MATCH (304 ins) after the change, and the local DECLARATION ORDER +// below is untouched (§76 — declaration order is the dominant regalloc lever here). +// +// ══════════════════════════════════════════════════════════════════════════════ +// THE BODY (SESSION-21 derivation, each lever re-verified this session) +// ══════════════════════════════════════════════════════════════════════════════ +// func_8014D820 (304 ins, ov_SC01_077, h_seq family exemplar, 138 members). +// The whole residual off the SESSION-18 close=9 seed was a sched1 PERMUTATION +// inside ONE basic block (idx 79..101, the pos/desc set-up between the `slti 0x400` +// guard and the `currentLocationId` test): identical multiset of insns, identical +// register assignment, wrong positions. §66d-5 exactly — classed WIDTH [structural] +// at every waypoint and not structural at all. +// +// The lever (reusable): that block is 12 statements over a small dependency poset +// (load x0/y0/z0 -> add -> store pos.* / desc.*), so source ORDER is the only +// control and the space of linear extensions is enumerable. A dependency-respecting +// sweep found MATCH at +// x0; pos.x; y0; pos.y; z0; tx; pos.z; tz; desc.x; desc.z; ty; desc.y +// i.e. all three loads and both pos stores first, then the two adds, then the desc +// stores, with the y accumulator (`ty`) computed LAST. No pin, no barrier, no +// permuter run. Eleven hand attempts on this window (SESSION-18) were inert or +// worse — hand-reading a 12-statement schedule permutation is the wrong tool; +// brute-forcing the linear extensions is the right one. +// +// Load-bearing levers (each re-verified by removal this session): +// * the `a0v` launder (`__asm__("" : "=r"(a0v) : "0"(a0))`) — drop => 9 mismatched +// * the `a2` $7 pin — drop => 5 +// * the `a2x -> a2` launder (vs a plain copy) — drop => 1 +// * `new_var3` (the s16 stash of dx feeding ratan2) — drop => 2 +// * `new_var2` (the desc.y + 0x10 accumulator) — drop => 2 +// The `a2` pin's live range ENDS before the first `jal` (last use is +// `desc.z = a2[2] - a1[2]`), so it is §42e-CORRECTION / §74-safe to propagate. +// +// SYMBOLS (§58 rule 1/2): all five data externs use the canonical splat spelling and +// the engine_core.h type — `u8 D_801202A0[]`, `u8 D_801152A8[]`, `s16 D_801152AC`, +// `u8 D_801840F8[]`, `s16 currentLocationId`. symcheck: SYMS-OK, 12 symbols agree. +// +// The one deliberate divergence (§27 step 2 / rule 3): func_80135A4C's canonical +// extern is 4-arg but this call site sets only $a0-$a2, so the canonical decl is +// kept verbatim (it is also the TU's own spelling at ov_SC01_077_after.c:1651/1709) +// and the ARITY is cast at the call site. +// +// BANKING NOTE for the orchestrator (carried forward from SESSION-18, still true): +// 1 `self_decl_hdr` axis remains — DEFINE_func_8014D790's body declares +// func_8014D820, so that macro in engine_core.h needs the §85 return-axis widen +// (already applied). With the `Ent_8014D820` collision gone the TU's cc1 stage is clean. + + + + + + + + + + +extern s16 currentLocationId; +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 a0, s32 a1, s32 a2); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +s32 func_8014D820(s32 a0, u16 *a1, u16 *a2x) +{ + + extern u8 D_801202A0[]; + extern u8 D_801840F8[]; + extern u8 D_801152A8[]; + extern s16 D_801152AC; + /* BLOCK-SCOPE types — see the header note. `Ent_8014D820` at file scope collides with + src/shared/engine_types.h:434 and kills the TU's cc1 stage (exit 33). */ + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_8014D820; + typedef struct EntD820_8014D820 + { + u16 f0; + u16 f2; + u16 f4; + u16 x; + u16 f8; + u16 y; + u16 fC; + u16 z; + u8 p10[0x10]; + s32 f20; + u8 p24[0x34]; + s32 f58; + u16 f5C; + u16 f5E; + u8 p60[0x10C - 0x60]; + } Ent_8014D820; + int new_var2; + s16 new_var3; +register u16 *a2 __asm__("$7"); + V4_8014D820 out[3]; + V4_8014D820 pos; + Desc desc; + Ent_8014D820 *ent; + Ent_8014D820 *p; + s32 dx; + s32 dz; + s32 ex; + s32 ez; + s32 r1; + s32 r2; + s32 r3; + s32 ang; + s32 x0; + s32 y0; + s32 z0; + s32 tx; + s32 tz; + s32 ty; + s32 r; + s32 t; + s32 u; + s32 a0v; +__asm__ __volatile__("" : "=r"(a2) : "0"(a2x)); + t = a2[0]; + u = a1[0]; + dx = t - u; +__asm__ __volatile__("" : "=r"(a0v) : "0"(a0)); + new_var3 = (s16) dx; + t = a2[2]; + u = a1[2]; + dz = t - u; + if (((s16) (dx | dz)) == 0) + { + goto fail; + } + desc.x = dx; + desc.y = a2[1] - a1[1]; + desc.z = a2[2] - a1[2]; + ent = *((Ent_8014D820 **) (a0v + 0x170)); + if (ent->f0 == 0) + { + goto fail; + } + if ((ent->f5C & 0x1000) == 0) + { + goto fail; + } + if (ent->f58 == 0) + { + goto fail; + } + if (((s32 (*)(s32, s32, s32)) func_80135A4C)(ent->f20, ent->f58, (s32) a1) == 0) + { + goto fail; + } + ex = ent->x - (*((u16 *) (a0v + 6))); + ez = ent->z - (*((u16 *) (a0v + 0xE))); + r1 = (s16) ratan2((s16) dz, new_var3); + r2 = (s16) ratan2((s16) ez, (s16) ex); + r3 = (s16) func_80012A60(r1, r2); + if (0x400 <= r3) + { + goto fail; + } + desc.f20 = 0; + desc.f1C = 0; + desc.f18 = 0; + x0 = ent->x; + pos.x = x0; + y0 = ent->y; + pos.y = y0; + z0 = ent->z; + tx = x0 + desc.x; + pos.z = z0; + tz = z0 + desc.z; + desc.x = tx; + desc.z = tz; + ty = (y0 + desc.y) + 8; + desc.y = ty; + if (currentLocationId != 0x3008) + { + for (p = (Ent_8014D820 *) D_801202A0; p < (Ent_8014D820 *) (D_801202A0 + 0x6480); p++) + { + if (p == ent) + { + continue; + } + if (p->f0 == 0) + { + continue; + } + if (p->f5C == 0) + { + continue; + } + if (p->f58 == 0) + { + continue; + } + func_80135888(p->f20, p->f58, (s32) (&pos), (s32) (&desc)); + } + + } + else + { + ang = ratan2(((s16) x0) - ((s16) tx), ((s16) z0) - ((s16) tz)) & 0xFFF; + func_800139C8(ang, D_801840F8, &out[0]); + func_800139C8((s16) (ang - 0x155), D_801840F8, &out[1]); + func_800139C8((s16) (ang + 0x155), D_801840F8, &out[2]); + out[0].x += pos.x; + out[0].y = pos.y; + out[0].z += pos.z; + out[1].x += pos.x; + out[1].y = pos.y; + out[1].z += pos.z; + out[2].x += pos.x; + out[2].y = pos.y; + out[2].z += pos.z; + for (p = (Ent_8014D820 *) D_801202A0; p < (Ent_8014D820 *) (D_801202A0 + 0x6480); p++) + { + if (p == ent) + { + continue; + } + if (p->f0 == 0) + { + continue; + } + if (p->f5C == 0) + { + continue; + } + if (p->f58 == 0) + { + continue; + } + if (func_8014DCE0((s32) p, (s32) (&pos), (s32) (&out[0])) != 0) + { + __builtin_memcpy((void *) ((s32) (&desc)), (void *) ((s32) (&pos)), 8); + } + } + + } + r = func_80133784(0, &pos, (s32) (&desc)); + if ((r == 0) || ((r == 0x2000) && (((*(u16 *) D_801152A8) | ((u16) D_801152AC)) == 0))) + { + ent->x = desc.x - desc.f18; + ent->y = desc.y; + ent->z = desc.z - desc.f20; + desc.x -= pos.x; + desc.y -= pos.y; + desc.z -= pos.z; + *((u16 *) (a0v + 6)) = a1[0] + desc.x; + new_var2 = desc.y; + new_var2 = new_var2 + 0x10; + *((u16 *) (a0v + 0xA)) = a1[1] + new_var2; + *((u16 *) (a0v + 0xE)) = a1[2] + desc.z; + } + else + { + *((u16 *) (a0v + 6)) = a1[0]; + *((u16 *) (a0v + 0xA)) = a1[1] + 0x10; + *((u16 *) (a0v + 0xE)) = a1[2]; + } + return 1; + fail: + *((s32 *) (a0v + 0x170)) = 0; + + return 0; +} + + +DEFINE_func_8014DCE0() /* dedup: shared engine-core @0x8014dce0 (src/shared) */ + + +DEFINE_func_8014DD8C() /* dedup: shared engine-core @0x8014dd8c (src/shared) */ + + + +extern void func_8014DF94(s32); + +void func_8014DF3C(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014DF94\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014DF94() /* dedup: shared engine-core @0x8014df94 (src/shared) */ + + +DEFINE_func_8014E048() /* dedup: shared engine-core @0x8014e048 (src/shared) */ + + +DEFINE_func_8014E284() /* dedup: shared engine-core @0x8014e284 (src/shared) */ + + + +extern void func_8014E48C(s32); + +void func_8014E434(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014E48C\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014E48C() /* dedup: shared engine-core @0x8014e48c (src/shared) */ + + +DEFINE_func_8014E514() /* dedup: shared engine-core @0x8014e514 (src/shared) */ + + +extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); +extern s32 func_8014D2A0(s32 arg0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +// +// The return type is LOAD-BEARING here (see DECAY note below), so `void` is not an option. +// Fix = the §37/§124 ASM-LABEL ALIAS, the same lever that banked func_8014C4AC today +// (.run/sweep/*/func_8014C4AC.c): define the body under the C name aF8014E5B4 carrying +// __asm__("func_8014E5B4"). The emitted symbol is unchanged, the C identifier never collides +// with the macro's extern, and NO tracked header edit is needed — the engine_core.h:13392 +// §85 return-axis widen described in the old banking note is now UNNECESSARY. +// Byte-checked: match_one MATCH (0 mismatches) before and after the rename. +// The alias line MUST travel with the body to every sibling overlay. +// +// DECAY FIX (2026-08-01, REDRAFT lane) — why the return type cannot be `void`: with `void`, +// gcc-2.7.2 drops the value axis entirely: no `addiu $v0,$zero,0x1`, no `addu $v0,$zero,$zero` +// at .L8014E674, and the `j .L8014E678` merge disappears (the taken path falls straight into +// the shared epilogue), which also frees $v0 so the last `lhu` lands in $v0 instead of the +// target's $v1. `s32` fixes all 23 mismatches at once. +// +// Keys (same D_801202A0 96-entry / stride-0x10C sweep as the func_8014CF04 and func_8014D2A0 +// siblings, so most of it is the already-banked idiom): +// +// (1) LOOP-BOUND DUALITY, register-relative BOTH ends (differs from func_8014CF04!). The +// target computes `addiu $v1,$s1,0x6480` for the ENTRY guard and then a separate +// `addu $s5,$v1,$zero` AFTER the guard branch for the loop-carried bound. That extra +// copy is 1 whole instruction: the plain `e = p + 0x6480; if (p < e)` spelling folds it +// away and compiles to 58 ins. The spelling that reproduces it is +// `if (p < p + 0x6480) { e = p + 0x6480; ... }` +// — the guard makes $v1, CSE turns the in-body `e = p + 0x6480` into a copy of it, and +// regalloc does not coalesce (gcc-2.7.2 has no coalescing, regalloc.md K8). The back edge +// then uses the register ($s5), NOT a rematerialised %hi/%lo(D_80126720) as in +// func_8014CF04 — so do NOT reuse that sibling's absolute-bound half here. +// +// (2) TWO INDUCTION VARIABLES, secondary base +0xE. `q = p + 0xE` carries every access except +// the two that use the entry pointer itself (`*(u16 *)p` and `*(u8 **)(a0+0x17C) = p`): +// offsets -0x8 / 0x0 / 0x12 / 0x4A / 0x4E off q == 0x6 / 0xE / 0x20 / 0x58 / 0x5C off p. +// A single-pointer spelling is NOT equivalent: gcc emits ONE base and the function comes +// out 56 ins (verified). The negative displacement is the tell that the second pointer is +// in the source, not a compiler-made giv. +// +// (3) REGISTER PINS ($16/$17) — the one non-obvious lever, and it is a genuine density +// knife-edge (regalloc.md K2 / §RC-15). Unpinned, the .lreg reads +// p: 9 refs / 24 insns -> floor_log2(9)*9/24 = 1.125 +// q: 8 refs / 22 insns -> floor_log2(8)*8/22 = 1.091 +// so p wins $s0 by ~3% and the whole function comes out with p/q SWAPPED (17 mismatches, +// every one of them a bare $s0<->$s1 rename). The target wants q in $s0. Decl-order swap +// does nothing (ties are not what decides it — p genuinely out-scores q). Rather than +// hunt a +1-ref anchor (§RC-11 `#APP` would sit next to three delay slots that maspsx +// fills: the `beqz $a1` slot, the `jal` slot and the `bnez` slot), pin both: +// register u8 *p __asm__("$17"); register u8 *q __asm__("$16"); +// Both are callee-saved, so the live-across-`jal` range is §42e/§74-safe by construction +// (the ov_SC03_099 func_8014D820 caveat only applies to caller-saved pins). Everything +// else falls out naturally: a0->$s2, a1->$s3, a2->$s4, e->$s5. +// +// (4) `t = *(s32 *)(q + 0x4A)` is loaded ONCE and reused as arg1 of func_80135888 — that is +// why `lw $a1, 0x4A($s0)` sits at the zero-test rather than at the call. +// +// The func_80135888 decl below is byte-compatible with the one this TU already carries at +// ov_SC01_077_after.c:2303, so it is not a second conflict axis. + +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); + +/* §37/§124 asm-label alias: the fleet canon declares this `extern void` (engine_core.h:13392, + * inside DEFINE_func_8014E48C()); the byte-true body must return s32. Aliasing the C name + * sidesteps the RETURN-axis conflict with no header edit. This line MUST travel with the body. */ +s32 aF8014E5B4(s32 a0, void *a1, void *a2) __asm__("func_8014E5B4"); + +DEFINE_func_8014E5B4() /* dedup: shared engine-core @0x8014E5B4 (src/shared) */ + + + +extern void func_8014E6F8(struct SubE6F8*); + +void func_8014E6A0(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014E6F8\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014E6F8() /* dedup: shared engine-core @0x8014e6f8 (src/shared) */ + + +DEFINE_func_8014E790() /* dedup: shared engine-core @0x8014e790 (src/shared) */ + + +DEFINE_func_8014E83C() /* dedup: shared engine-core @0x8014e83c (src/shared) */ + + + + +void func_8014E934(s32 _arg0) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014E98C\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014E98C() /* dedup: shared engine-core @0x8014e98c (src/shared) */ + + +DEFINE_func_8014EA4C() /* dedup: shared engine-core @0x8014ea4c (src/shared) */ + + +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019A8A0; + +void func_8014ED28(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014ED80\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014ED80() /* dedup: shared engine-core @0x8014ed80 (src/shared) */ + + +DEFINE_func_8014EE14() /* dedup: shared engine-core @0x8014ee14 (src/shared) */ + + + +extern s32 func_8014F24C(struct SubF24C*); + +void func_8014F1F4(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F24C\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014F24C() /* dedup: shared engine-core @0x8014f24c (src/shared) */ + + +DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */ + + +DEFINE_func_8014F3E8() /* dedup: shared engine-core @0x8014f3e8 (src/shared) */ + + +extern int D_8019A8A4; +extern s32 func_8014F4C0(s32); + +s32 func_8014F468(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F4C0\n" + "lui $at, %%hi(D_8019A8A4)\n" + "sw $v0, %%lo(D_8019A8A4)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A4)\n" + "lw $v0, %%lo(D_8019A8A4)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014F4C0() /* dedup: shared engine-core @0x8014f4c0 (src/shared) */ + + +extern int D_8019A8A4; +extern int func_8014F74C(); + +int func_8014F6F4(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014F74C\n" + "lui $at, %%hi(D_8019A8A4)\n" + "sw $v0, %%lo(D_8019A8A4)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A4)\n" + "lw $v0, %%lo(D_8019A8A4)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014F74C() /* dedup: shared engine-core @0x8014f74c (src/shared) */ + + + +// @class: other +// @stuck: none — MATCH (full inline-asm $sp-switch trampoline w/ 0x40000 guard, jal func_8014FA70, stash D_8019A8A4; maspsx auto-fills jal delay slot) + +extern s32 func_8014FA70(s32 a0); + +void func_8014FA04(s32 a0) +{ + + extern s32 D_8019A8A4; + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "sw $ra, 16($sp)\n" + "lw $v0, 68($a0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 1f\n" + "addu $v0, $zero, $zero\n" + "lui $a1, 0x1f80\n" + "ori $a1, $a1, 0x03fc\n" + "addu $t0, $a1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "lui $at, %%hi(D_8019A8A4)\n" + "sw $v0, %%lo(D_8019A8A4)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A4)\n" + "lw $v0, %%lo(D_8019A8A4)($v0)\n" + "1:\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FA70() /* dedup: shared engine-core @0x8014fa70 (src/shared) */ + + + +extern s32 func_8014FC18(u8*); + +void func_8014FBC0(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FC18\n" + "lui $at, %%hi(D_8019A8A4)\n" + "sw $v0, %%lo(D_8019A8A4)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A4)\n" + "lw $v0, %%lo(D_8019A8A4)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FC18() /* dedup: shared engine-core @0x8014fc18 (src/shared) */ + + + +extern int func_8014FD54(int); + +void func_8014FCFC(void) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FD54\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */ + + +DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */ + + + +DEFINE_func_8014FE60() /* dedup: shared engine-core @0x8014FE60 (src/shared) */ + + +DEFINE_func_8014FFDC() /* dedup: shared engine-core @0x8014ffdc (src/shared) */ + + +DEFINE_func_80150150() /* dedup: shared engine-core @0x80150150 (src/shared) */ + + +DEFINE_func_80150170() /* dedup: shared engine-core @0x80150170 (src/shared) */ + + +DEFINE_func_801502EC() /* dedup: shared engine-core @0x801502ec (src/shared) */ + + +DEFINE_func_80150460() /* dedup: shared engine-core @0x80150460 (src/shared) */ + + + + +extern void func_801504D8(u16 *a0); + +s32 func_80150480(s32 _arg0) +{ + __asm__ __volatile__( + ".set noreorder\n" + "addiu $sp, $sp, -24\n" + "lui $v1, 0x1f80\n" + "ori $v1, $v1, 0x03fc\n" + "sw $ra, 16($sp)\n" + "addu $t0, $v1, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_801504D8\n" + "lui $at, %%hi(D_8019A8A0)\n" + "sw $v0, %%lo(D_8019A8A0)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "lui $v0, %%hi(D_8019A8A0)\n" + "lw $v0, %%lo(D_8019A8A0)($v0)\n" + "lw $ra, 16($sp)\n" + "addiu $sp, $sp, 24\n" + : : : "memory"); +} + + +DEFINE_func_801504D8() /* dedup: shared engine-core @0x801504d8 (src/shared) */ + + +DEFINE_func_80150528() /* dedup: shared engine-core @0x80150528 (src/shared) */ + + +DEFINE_func_801505FC() /* dedup: shared engine-core @0x801505fc (src/shared) */ + + +extern void func_80147324(s32 a0); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); + + + +s32 func_801506A4(s32 arg0, s32 arg1) { + + extern u16 aD80078EB4 __asm__("D_80078EB4"); + extern void func_80150820(s32, s32); + extern void func_8015086C(int); + extern unsigned short D_80184108[]; + extern unsigned short D_80184110[]; + extern unsigned short D_80184118[]; + + int mode; + + mode = ((struct Ent_801506A4 *)arg1)->unk0; + ((struct Ent_801506A4 *)arg1)->unk5C |= 1; + switch (mode) { + case 0x31: + ((void(*)(int))func_80147324)(0x452); + ((void(*)(int, unsigned))func_8014ADA8)(((int)arg0), D_80184108[((struct Ent_801506A4 *)arg1)->unk70]); + ((void(*)(int, int, unsigned))func_8014ACE8)(((int)arg0), 3, D_80184108[((struct Ent_801506A4 *)arg1)->unk70]); + break; + case 0x32: + if ((*(unsigned short*)&aD80078EB4) != 0) { + ((void(*)(int))func_80147324)(0x452); + ((void(*)(int, unsigned, int))func_8014BB24)(((int)arg0), D_80184110[((struct Ent_801506A4 *)arg1)->unk70], 1); + ((void(*)(int, int, unsigned))func_8014ACE8)(((int)arg0), 2, D_80184110[((struct Ent_801506A4 *)arg1)->unk70]); + } + break; + case 0x33: + ((void(*)(int))func_80147324)(0x452); + ((void (*)(int, unsigned))func_80150820)(((int)arg0), D_80184118[((struct Ent_801506A4 *)arg1)->unk70]); + break; + case 0xC5: + case 0x27B: + ((void(*)(int))func_80147324)(0x452); + func_8015086C(((int)arg0)); + break; + } +} + + +DEFINE_func_80150820() /* dedup: shared engine-core @0x80150820 (src/shared) */ + + +DEFINE_func_8015086C() /* dedup: shared engine-core @0x8015086c (src/shared) */ + + +DEFINE_func_801508B4() /* dedup: shared engine-core @0x801508b4 (src/shared) */ + + +DEFINE_func_801508F8() /* dedup: shared engine-core @0x801508f8 (src/shared) */ + + + typedef struct + { + u16 x; + u16 y; + u16 z; + u16 w; + } V4_8015094C; + +extern s32 func_80021174(s32 a0, s32 a1); + +s32 func_8015094C(s32 param_1) { + + extern S16 D_80199EC8; + extern s32 D_80184120; + extern s32 D_80126990; + extern s32 D_80126994; + extern u8 D_80126948[]; + struct { s32 x, mid, y; s32 _pad[9]; } arg; /* 0x30 @ 0x10 */ + S16 local; /* 0x10 @ 0x40 */ + s32 pad1[4]; /* 0x10 @ 0x50 */ + register u8 *cam __asm__("$17") = D_80126948; + s32 ret; + + local = D_80199EC8; + arg.x = *(short *)(param_1 + 6); + arg.mid = D_80126994; + arg.y = *(short *)(param_1 + 0xe); + ret = func_80021174(D_80184120, (s32)&arg); + if (ret == 0) { + { + short cur = *(short *)(param_1 + 6); + s32 diff = D_80126990 - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 6) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + { + short cur = *(short *)(param_1 + 0xe); + s32 diff = *(s32 *)(cam + 0x50) - cur; + s32 av = (diff < 0) ? -diff : diff; + if (av >= 5) { + *(short *)(param_1 + 0xe) = (diff >= 0) ? cur + 4 : cur - 4; + } + } + (void)&pad1; + return 1; + } + return 0; +} + + + +extern s32 func_8014FA70(s32 a0); +extern void func_80015978(s32 a0, s32 *a1); + +void func_80150A70(s32 a0) +{ + + extern s32 D_8019A8A4; + __asm__ __volatile__( + ".set\tnoreorder\n" + "addiu $sp, $sp, -24\n" + "sw $s0, 16($sp)\n" + "addu $s0, $a0, $zero\n" + "sw $ra, 20($sp)\n" + "lh $v1, 6($s0)\n" + "lh $v0, 136($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 10($s0)\n" + "lh $v0, 138($s0)\n" + "nop\n" + "bne $v1, $v0, 1f\n" + "nop\n" + "lh $v1, 14($s0)\n" + "lh $v0, 140($s0)\n" + "nop\n" + "beq $v1, $v0, 3f\n" + "nop\n" + "1:\n" + "lw $v0, 68($s0)\n" + "lui $v1, 0x4\n" + "and $v0, $v0, $v1\n" + "bnez $v0, 2f\n" + "addiu $a0, $s0, 4\n" + "lui $a2, 0x1f80\n" + "ori $a2, $a2, 0x03fc\n" + "addu $t0, $a2, $zero\n" + "lw $t1, 0($t0)\n" + "nop\n" + "sw $sp, 0($t1)\n" + "addiu $t1, $t1, -4\n" + "addu $sp, $t1, $zero\n" + "jal func_8014FA70\n" + "addu $a0, $s0, $zero\n" + "lui $at, %%hi(D_8019A8A4)\n" + "sw $v0, %%lo(D_8019A8A4)($at)\n" + "addiu $sp, $sp, 4\n" + "lw $sp, 0($sp)\n" + "addiu $a0, $s0, 4\n" + "2:\n" + "jal func_80015978\n" + "addiu $a1, $s0, 136\n" + "3:\n" + "lw $ra, 20($sp)\n" + "lw $s0, 16($sp)\n" + "addiu $sp, $sp, 24\n" + ".set\treorder\n" + : : : "memory"); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0) + + +void func_80150B28(int param_1) { + + extern s32 D_800AE6B0; + extern void (*D_80184124[])(void); + u32 idx; + register u32 sub __asm__("$2"); + + if ((D_800AE6B0 & 0x80FFFFFF) == 0) { + idx = *(u16 *)(param_1 + 0x16C); + if (idx != 0 && idx < 0x26) { + sub = idx - 1; + D_80184124[sub](); + } + } + *(u16 *)(param_1 + 0x16C) = 0; +} + + +void func_80150B9C(void) { +} + +DEFINE_func_80150BA4() /* dedup: shared engine-core @0x80150ba4 (src/shared) */ + + +DEFINE_func_80150BC8() /* dedup: shared engine-core @0x80150bc8 (src/shared) */ + + +DEFINE_func_80150C48() /* dedup: shared engine-core @0x80150c48 (src/shared) */ + + +DEFINE_func_80150CA0() /* dedup: shared engine-core @0x80150ca0 (src/shared) */ + + +DEFINE_func_80150CC4() /* dedup: shared engine-core @0x80150cc4 (src/shared) */ + + +DEFINE_func_80150CE4() /* dedup: shared engine-core @0x80150ce4 (src/shared) */ + + +DEFINE_func_80150D04() /* dedup: shared engine-core @0x80150d04 (src/shared) */ + + +DEFINE_func_80150D24() /* dedup: shared engine-core @0x80150d24 (src/shared) */ + + +DEFINE_func_80150D44() /* dedup: shared engine-core @0x80150d44 (src/shared) */ + + +DEFINE_func_80150D64() /* dedup: shared engine-core @0x80150d64 (src/shared) */ + + +DEFINE_func_80150D84() /* dedup: shared engine-core @0x80150d84 (src/shared) */ + + +DEFINE_func_80150DA4() /* dedup: shared engine-core @0x80150da4 (src/shared) */ + + +DEFINE_func_80150DC4() /* dedup: shared engine-core @0x80150dc4 (src/shared) */ + + +DEFINE_func_80150DE4() /* dedup: shared engine-core @0x80150de4 (src/shared) */ + + +DEFINE_func_80150E04() /* dedup: shared engine-core @0x80150e04 (src/shared) */ + + +DEFINE_func_80150E24() /* dedup: shared engine-core @0x80150e24 (src/shared) */ + + +DEFINE_func_80150E44() /* dedup: shared engine-core @0x80150e44 (src/shared) */ + + +DEFINE_func_80150E64() /* dedup: shared engine-core @0x80150e64 (src/shared) */ + + +DEFINE_func_80150E84() /* dedup: shared engine-core @0x80150e84 (src/shared) */ + + +DEFINE_func_80150EA4() /* dedup: shared engine-core @0x80150ea4 (src/shared) */ + + +DEFINE_func_80150EC4() /* dedup: shared engine-core @0x80150ec4 (src/shared) */ + + +void func_80150F78(void) { +} + +DEFINE_func_80150F80() /* dedup: shared engine-core @0x80150f80 (src/shared) */ + + +DEFINE_func_80150FB4() /* dedup: shared engine-core @0x80150fb4 (src/shared) */ + + +DEFINE_func_80150FD8() /* dedup: shared engine-core @0x80150fd8 (src/shared) */ + + +DEFINE_func_80151014() /* dedup: shared engine-core @0x80151014 (src/shared) */ + + +DEFINE_func_80151038() /* dedup: shared engine-core @0x80151038 (src/shared) */ + + +DEFINE_func_80151070() /* dedup: shared engine-core @0x80151070 (src/shared) */ + + +DEFINE_func_80151094() /* dedup: shared engine-core @0x80151094 (src/shared) */ + + +void func_801510B8(void) { +} + +void func_801510C0(void) { +} + +DEFINE_func_801510C8() /* dedup: shared engine-core @0x801510c8 (src/shared) */ + + +DEFINE_func_801510EC() /* dedup: shared engine-core @0x801510ec (src/shared) */ + + +DEFINE_func_80151110() /* dedup: shared engine-core @0x80151110 (src/shared) */ + + +void func_80151130(void) { +} + +DEFINE_func_80151138() /* dedup: shared engine-core @0x80151138 (src/shared) */ + + +DEFINE_func_8015115C() /* dedup: shared engine-core @0x8015115c (src/shared) */ + + +DEFINE_func_80151164() /* dedup: shared engine-core @0x80151164 (src/shared) */ + + +DEFINE_func_80151184() /* dedup: shared engine-core @0x80151184 (src/shared) */ + + +DEFINE_func_801511A8() /* dedup: shared engine-core @0x801511a8 (src/shared) */ + + +DEFINE_func_801511C4() /* dedup: shared engine-core @0x801511c4 (src/shared) */ + + +DEFINE_func_801511E0() /* dedup: shared engine-core @0x801511e0 (src/shared) */ + + +DEFINE_func_80151204() /* dedup: shared engine-core @0x80151204 (src/shared) */ + + +DEFINE_func_80151238() /* dedup: shared engine-core @0x80151238 (src/shared) */ + + +DEFINE_func_8015126C() /* dedup: shared engine-core @0x8015126c (src/shared) */ + + + +/* func_80151664 — INTEGRATE lane. + * Fleet canon (src/shared/engine_core.h:2924, inside DEFINE_func_8015410C()) declares + * extern void func_80151664(void); + * so a `void func_80151664(s32 a0)` definition is `conflicting types` in every TU that + * expands that macro (ov_SC01_077_after.c:3910 does). Cookbook §73 PARAMS axis / §42: + * keep the canonical (void) signature and read the incoming argument through a $a0 pin. + * The decl below is reproduced verbatim so this file compiles the real conflict. */ +extern void func_80151664(void); + +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801470AC(s32 *a0); +extern void func_801472B4(void *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80153C18(); /* fleet canon: K&R empty prototype (engine_core.h:75, :1682 defines it (void)); + * a prototyped (s32) decl is `conflicting types` in this TU. Arg still + * passes in $a0 under default promotions -> codegen unchanged. */ + +void func_80151664(void) { + register s32 a0v __asm__("$4"); + s32 s0; + s32 v1; + + s0 = a0v; + func_80154A74(s0, 0x11); + func_801553C0(s0); + func_801470AC((s32 *)s0); + func_801472B4((void *)s0); + v1 = *(s32 *)(s0 + 0x20); + *(s16 *)(s0 + 0x3E) = 0; + *(s16 *)(s0 + 0x40) = 0; + *(s16 *)(s0 + 0x42) = 0; + *(s8 *)(s0 + 0xDD) = 0; + *(s16 *)(s0 + 0x3C) = *(u16 *)(s0 + 0x3C) & 0xFFFE; + *(s16 *)(v1 + 0x10) = 0; + *(s16 *)(s0 + 0x60) = 0x1000; + *(s16 *)(s0 + 0x62) = 0x1000; + *(s16 *)(s0 + 0x64) = 0x1000; + func_801477E8((s32 *)s0, 0); + func_80153C18(s0); +} + + +DEFINE_func_801516F0() /* dedup: shared engine-core @0x801516f0 (src/shared) */ + + +DEFINE_func_8015173C() /* dedup: shared engine-core @0x8015173c (src/shared) */ + + +DEFINE_func_80151780() /* dedup: shared engine-core @0x80151780 (src/shared) */ + + +void func_80151878(void) { +} + +DEFINE_func_80151880() /* dedup: shared engine-core @0x80151880 (src/shared) */ + + +DEFINE_func_801518D8() /* dedup: shared engine-core @0x801518d8 (src/shared) */ + + +DEFINE_func_80151924() /* dedup: shared engine-core @0x80151924 (src/shared) */ + + + + +void func_80151944(void *a0) { + + extern void (*D_801841B8[])(void); + D_801841B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80151980() /* dedup: shared engine-core @0x80151980 (src/shared) */ + + +DEFINE_func_801519C8() /* dedup: shared engine-core @0x801519c8 (src/shared) */ + + +DEFINE_func_80151AE4() /* dedup: shared engine-core @0x80151ae4 (src/shared) */ + + +DEFINE_func_80151B98() /* dedup: shared engine-core @0x80151b98 (src/shared) */ + + +DEFINE_func_80151C54() /* dedup: shared engine-core @0x80151c54 (src/shared) */ + + + + +void func_80151D24(void *a0) { + + extern void (*D_801841C8[])(void); + D_801841C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80151D60() /* dedup: shared engine-core @0x80151d60 (src/shared) */ + + +DEFINE_func_80151DB0() /* dedup: shared engine-core @0x80151db0 (src/shared) */ + + +DEFINE_func_80151E78() /* dedup: shared engine-core @0x80151e78 (src/shared) */ + + +DEFINE_func_80151ECC() /* dedup: shared engine-core @0x80151ecc (src/shared) */ + + +DEFINE_func_80151F38() /* dedup: shared engine-core @0x80151f38 (src/shared) */ + + +DEFINE_func_80151FB4() /* dedup: shared engine-core @0x80151fb4 (src/shared) */ + + + + +void func_80152058(void *a0) { + + extern void (*D_801841EC[])(void); + D_801841EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152094() /* dedup: shared engine-core @0x80152094 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); + +void func_801520DC(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_801841DC; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_801472C8(arg0); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_801841DC); + func_801477E8(arg0, 0x40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146A6C(0x10, arg0, M2C_FIELD(arg0, s16 *, 6), M2C_FIELD(arg0, s16 *, 0xA), (s32) M2C_FIELD(arg0, s16 *, 0xE), 0, 0); + func_80147324(0x441); + func_80146CA0(arg0); +} + + +DEFINE_func_80152194() /* dedup: shared engine-core @0x80152194 (src/shared) */ + + +DEFINE_func_8015220C() /* dedup: shared engine-core @0x8015220c (src/shared) */ + + +DEFINE_func_80152254() /* dedup: shared engine-core @0x80152254 (src/shared) */ + + +DEFINE_func_801522CC() /* dedup: shared engine-core @0x801522cc (src/shared) */ + + + + +void func_80152370(void *a0) { + + extern void (*D_80184200[])(void); + D_80184200[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801523AC() /* dedup: shared engine-core @0x801523ac (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (67 ins) + +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80019064(void *a0); +extern int func_80151204(int arg, int a1); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + + +void func_801523F4(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern s32 D_800D58AC; + extern u8 D_8018420C[]; + s32 pad[4]; + s32 buf[4]; + register s32 s0a __asm__("$16"); /* $s0 = buf */ + register s32 s2a __asm__("$18") = (s32)&D_8018420C; /* $s2 = &D_8018420C */ + + ((void (*)(s32, s32))func_80146E90)(arg0, 0); + func_80019064(&D_80062C04); + ((void (*)(s32, s32))func_80151204)(arg0, *(s16 *)(arg0 + 0xF2)); + if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), + (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); + } else { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); + } + func_80154A74(arg0, 0x16); + ((void (*)(s32))func_80149020)(arg0); + s0a = (s32)buf; + ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, + s2a, s0a); + ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); + ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(s2a + 0xC)); + func_80147324(0x451); + ((void (*)(s32))func_80146CA0)(arg0); + (void)pad; +} + + +DEFINE_func_80152500() /* dedup: shared engine-core @0x80152500 (src/shared) */ + + +DEFINE_func_801525F4() /* dedup: shared engine-core @0x801525f4 (src/shared) */ + + + + +void func_80152698(void *a0) { + + extern void (*D_8018421C[])(void); + D_8018421C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801526D4() /* dedup: shared engine-core @0x801526d4 (src/shared) */ + + +DEFINE_func_80152714() /* dedup: shared engine-core @0x80152714 (src/shared) */ + + +DEFINE_func_80152790() /* dedup: shared engine-core @0x80152790 (src/shared) */ + + + + +void func_8015282C(void *a0) { + + extern void (*D_80184234[])(void); + D_80184234[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152868() /* dedup: shared engine-core @0x80152868 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_801528B0(s32 arg0) +{ + + extern u8 D_80062C04[]; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_80184224; + func_80019064(&D_80062C04); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + func_80146DB8(arg0, &D_80184224); + func_801477E8(arg0, 0xFFF00000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_8015294C() /* dedup: shared engine-core @0x8015294c (src/shared) */ + + +DEFINE_func_80152A08() /* dedup: shared engine-core @0x80152a08 (src/shared) */ + + +DEFINE_func_80152A50() /* dedup: shared engine-core @0x80152a50 (src/shared) */ + + +DEFINE_func_80152AC8() /* dedup: shared engine-core @0x80152ac8 (src/shared) */ + + + + +void func_80152B6C(void *a0) { + + extern void (*D_80184248[])(void); + D_80184248[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152BA8() /* dedup: shared engine-core @0x80152ba8 (src/shared) */ + + +DEFINE_func_80152BF0() /* dedup: shared engine-core @0x80152bf0 (src/shared) */ + + +DEFINE_func_80152C40() /* dedup: shared engine-core @0x80152c40 (src/shared) */ + + +DEFINE_func_80152C80() /* dedup: shared engine-core @0x80152c80 (src/shared) */ + + + + +void func_80152D24(void *a0) { + + extern void (*D_80184264[])(void); + D_80184264[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80152D60() /* dedup: shared engine-core @0x80152d60 (src/shared) */ + + + +extern void func_80019064(void *a0); +extern void func_80146CA0(void *a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147324(s32 a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8014CBF8(void *a0); +extern int func_80151204(int arg, int a1); +extern void func_80154274(s32 *a0, s32 a1); + +void func_80152DA8(s32 arg0) +{ + + extern s32 D_80062C14; + extern M2C_UNK D_800D5880; + extern M2C_UNK D_80184254; + func_80019064(&D_80062C14); + func_80151204(arg0, M2C_FIELD(arg0, s16 *, 0xF2)); + func_80149020(arg0); + func_80154274(arg0, &D_800D5880); + func_80147324(0x451); + M2C_FIELD(arg0, s8 *, 0xDE) = 0x10; + M2C_FIELD(arg0, s8 *, 0xDF) = 8; + func_80146DB8(arg0, &D_80184254); + func_801477E8(arg0, 0xFFE40000); + func_8014CBF8(arg0); + func_801474EC(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80152E4C() /* dedup: shared engine-core @0x80152e4c (src/shared) */ + + +DEFINE_func_80152EFC() /* dedup: shared engine-core @0x80152efc (src/shared) */ + + +DEFINE_func_80152F44() /* dedup: shared engine-core @0x80152f44 (src/shared) */ + + +DEFINE_func_80152FBC() /* dedup: shared engine-core @0x80152fbc (src/shared) */ + + + + +void func_80153060(void *a0) { + + extern void (*D_80184278[])(void); + D_80184278[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015309C() /* dedup: shared engine-core @0x8015309c (src/shared) */ + + +DEFINE_func_801530E4() /* dedup: shared engine-core @0x801530e4 (src/shared) */ + + +DEFINE_func_80153150() /* dedup: shared engine-core @0x80153150 (src/shared) */ + + +DEFINE_func_801531BC() /* dedup: shared engine-core @0x801531bc (src/shared) */ + + +DEFINE_func_80153204() /* dedup: shared engine-core @0x80153204 (src/shared) */ + + +DEFINE_func_8015327C() /* dedup: shared engine-core @0x8015327c (src/shared) */ + + + + +void func_80153320(void *a0) { + + extern void (*D_8018428C[])(void); + D_8018428C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015335C() /* dedup: shared engine-core @0x8015335c (src/shared) */ + + +DEFINE_func_801533A4() /* dedup: shared engine-core @0x801533a4 (src/shared) */ + + +DEFINE_func_80153410() /* dedup: shared engine-core @0x80153410 (src/shared) */ + + +DEFINE_func_80153490() /* dedup: shared engine-core @0x80153490 (src/shared) */ + + +DEFINE_func_801534D8() /* dedup: shared engine-core @0x801534d8 (src/shared) */ + + +DEFINE_func_80153550() /* dedup: shared engine-core @0x80153550 (src/shared) */ + + +DEFINE_func_801535F4() /* dedup: shared engine-core @0x801535F4 (src/shared) */ + +DEFINE_func_8015369C() /* dedup: shared engine-core @0x8015369c (src/shared) */ + + +DEFINE_func_801536DC() /* dedup: shared engine-core @0x801536dc (src/shared) */ + + +extern void func_80015954(s32 a0, s32 a1); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern void *memcpy(void *dst, const void *src, u32 n); +s32 func_80153800(s32 a0) { + + extern void (*D_8011DB28)(s32 a0); + extern u8 D_80126DB0[]; + extern u16 D_80126DB6; + s32 s1 = a0; + s32 s0; + s32 s2; + u8 bVar1; + s16 buf1[4]; + s16 buf2[4]; + if (D_8011DB28 != 0) { + ((void (*)(s32, s32))func_80015978)(s1 + 4, s1 + 0x88); + memcpy((void *)(s1 + 0x90), (void *)(s1 + 0x88), 8); +ret0: + return 0; + } + bVar1 = *(u8 *)(s1 + 0xDE); + if (bVar1 >= 0x21) { + s32 base = (s32)D_80126DB0; + func_80015954(base, s1 + 4); + memcpy((void *)(s1 + 0x88), (void *)base, 8); + memcpy((void *)(s1 + 0x90), (void *)(s1 + 0x88), 8); + *(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = D_80126DB6; + return 0; + } + { + register s32 m __asm__("$3") = bVar1 * 4; + s2 = m; + buf2[1] = *(u16 *)(s1 + 0xA2) - m; + } + for (s0 = 0; s0 < 0x80; s0++) { + s32 ang = s0 * 0x200000; + buf1[0] = 0; + buf1[1] = 0; + buf1[2] = s2; + func_800139C8(ang >> 0x10, buf1, buf1); + buf2[0] = *(u16 *)(s1 + 0xA0) + buf1[0]; + buf2[2] = *(u16 *)(s1 + 0xA4) + buf1[2]; + if (((s32 (*)(s32, void *))func_80153978)(s1, buf2) == 0) { + goto ret0; + } + } + *(u8 *)(s1 + 0xDE) = *(u8 *)(s1 + 0xDE) + 1; + return 1; +} + + +DEFINE_func_80153978() /* dedup: shared engine-core @0x80153978 (src/shared) */ + + +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern void *memcpy(void *dst, const void *src, u32 n); +s32 func_801539F8(s32 a0, void * a1) +{ + u8 buf1[8]; + u8 buf2[8]; + u8 buf3[8]; + s32 r1, r2, r3; + memcpy(buf1, (void *)(a0 + 0xA0), 8); + memcpy(buf2, a1, 8); + *(s16 *)(buf1 + 2) -= 4; + r1 = func_80133784(0, buf1, buf2); + if (r1 != 0x2000) { + return 1; + } + memcpy((void *)buf1, (void *)(s32)buf2, 8); + *(s16 *)(buf2 + 2) += 8; + r2 = func_80133784(0, buf1, buf2); + if (r2 != r1) { + return 1; + } + r3 = func_80133784(2, buf2, buf3); + if (r3 != r2) { + return 1; + } + *(s16 *)(a0 + 0x88) = *(s16 *)(buf2 + 0); + *(s16 *)(a0 + 0x8A) = *(s16 *)(buf2 + 2); + *(s16 *)(a0 + 0x8C) = *(s16 *)(buf2 + 4); + memcpy((void *)(a0 + 0x90), (void *)(a0 + 0x88), 8); + return 0; +} + + +DEFINE_func_80153B58() /* dedup: shared engine-core @0x80153b58 (src/shared) */ + + +DEFINE_func_80153BD8() /* dedup: shared engine-core @0x80153bd8 (src/shared) */ + + +DEFINE_func_80153BF0() /* dedup: shared engine-core @0x80153bf0 (src/shared) */ + + +DEFINE_func_80153C18() /* dedup: shared engine-core @0x80153c18 (src/shared) */ + + +DEFINE_func_80153C30() /* dedup: shared engine-core @0x80153c30 (src/shared) */ + + +DEFINE_func_80153C44() /* dedup: shared engine-core @0x80153c44 (src/shared) */ + + +DEFINE_func_80153C74() /* dedup: shared engine-core @0x80153c74 (src/shared) */ + + +DEFINE_func_80153C8C() /* dedup: shared engine-core @0x80153c8c (src/shared) */ + + +DEFINE_func_80153C9C() /* dedup: shared engine-core @0x80153c9c (src/shared) */ + + +DEFINE_func_80153CBC() /* dedup: shared engine-core @0x80153cbc (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH (expected); dispatch-table %lo-fold via extern fn-ptr array, s0 holds param across both calls +extern void func_80019064(void *a0); + +void func_80153CCC(S80153CCC *a0) { + + extern s32 D_801842A0; + extern void (*D_801842C8[])(void *a0); + extern s16 D_8011DB0C; + extern u16 D_8011F748; + ((s32 (*)(s32))func_80019064)((s32)&D_801842A0); + D_801842C8[a0->idx](a0); + D_8011DB0C = 0; + D_8011F748 = 0; +} + + +DEFINE_func_80153D34() /* dedup: shared engine-core @0x80153d34 (src/shared) */ + + + +// @class: regalloc-order +// @stuck: none — MATCH (33/33) + +extern void func_80147324(s32 arg0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_80146CA0(void *a0); +extern s16 currentLocationId; + +void func_80153D7C(s32 param_1) +{ + + extern u8 D_801842A8; + func_80147324(0x451); + func_80154274((s32 *)param_1, (s32)&D_801842A8); + func_80149020((s32 *)param_1); + *(u16 *)(param_1 + 0x244) = *(u16 *)(param_1 + 6); + *(u16 *)(param_1 + 0x246) = *(u16 *)(param_1 + 10); + *(u16 *)(param_1 + 0x248) = *(u16 *)(param_1 + 0xe); + if (currentLocationId == 0x3075) *(u8 *)(param_1 + 0xde) = 0x14; + else *(u8 *)(param_1 + 0xde) = 10; + *(u8 *)(param_1 + 0xdf) = 0; + __asm__ __volatile__("" ::: "memory"); + func_80146CA0((void *)param_1); +} + + +DEFINE_func_80153E00() /* dedup: shared engine-core @0x80153e00 (src/shared) */ + + +DEFINE_func_8015410C() /* dedup: shared engine-core @0x8015410c (src/shared) */ + + +DEFINE_func_80154134() /* dedup: shared engine-core @0x80154134 (src/shared) */ + + +DEFINE_func_80154150() /* dedup: shared engine-core @0x80154150 (src/shared) */ + + +DEFINE_func_80154190() /* dedup: shared engine-core @0x80154190 (src/shared) */ + + +DEFINE_func_801541D8() /* dedup: shared engine-core @0x801541d8 (src/shared) */ + + +DEFINE_func_80154218() /* dedup: shared engine-core @0x80154218 (src/shared) */ + + +DEFINE_func_80154274() /* dedup: shared engine-core @0x80154274 (src/shared) */ + + +DEFINE_func_801542A4() /* dedup: shared engine-core @0x801542a4 (src/shared) */ + + +DEFINE_func_801542DC() /* dedup: shared engine-core @0x801542dc (src/shared) */ + + +DEFINE_func_8015430C() /* dedup: shared engine-core @0x8015430c (src/shared) */ + + +DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ + + +DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ + diff --git a/src/ov_SC03_107/ov_SC03_107_o0d.c b/src/ov_SC03_107/ov_SC03_107_o0d.c new file mode 100644 index 000000000..023f1a773 --- /dev/null +++ b/src/ov_SC03_107/ov_SC03_107_o0d.c @@ -0,0 +1,1107 @@ +#include "common.h" +#include "../shared/engine_core.h" + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(void); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern void func_80029444(void); +extern void func_800D1754(void); +extern void func_80129CF8(void); +extern void func_8017849C(void); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_801505FC(s32 a0); +extern s32 func_801508B4(s32); +extern void func_80165E90(void); +extern void func_801627E8(void); +extern void func_80162B1C(void); +extern void func_80165CA0(void); +extern void func_80129010(void); +extern void func_8013CA14(void); +extern void func_800190AC(void); +extern void func_8012956C(void); +extern s32 func_8016E95C(); +extern void func_801754A8(void); +extern void func_8013BC7C(); +extern void func_8013BCDC(void); +extern void func_801379FC(void); +extern void func_8001212C(void); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern int func_801288E8(int arg0); +extern int func_80128940(int arg0); +extern void func_80010AE0(s32 a0); +extern CdFileLoc cdFileLocTable[]; +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); +extern s32 func_80128C98(s32 arg0); +extern s32 func_80128CFC(s32 arg0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(); +extern void func_8012944C(void); +extern void func_80015B6C(s32, s16, s32, s16, s32, s32, s32, s32, s32, s32); +extern void GsSortBg(s32 *, void *, u16, s32 *); +extern void GsSortFastBg(s32 *, void *, u16, s32 *); +extern unsigned short D_800B99F0; +extern struct BigCopy D_80126DB8; +extern struct BigCopy D_80114EE8; +extern s32 D_80126E60[]; +extern s8 D_801150D6; +extern s8 D_801152C0; +extern u8 D_80127504; +extern void func_800144D4(void); +extern void func_80129C40(s32 _arg0); +extern void func_8012A328(void); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern s32 D_80126F04[]; +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern s32 D_800AE688[]; +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A018(s32 a0, s32 a1); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern void func_8012A1BC(void); +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern s32 func_80012F74(s32, s32, s32, s32); +extern void func_8012A418(void); +extern Vec8 D_80114F24; +extern void func_8012A464(void); +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s32 func_80047D3C(s32 a0); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_8012A6D0(void* a0, void* a1); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern void func_8012ACA0(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern Mat32 D_800AE620; +extern void RotMatrixX(int r, void *m); +extern void RotMatrixY(int r, void *m); +extern void RotMatrixZ(int r, void *m); +extern s32 func_8012B4B8(int param_1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s32 func_80047948(s32 a0); /* rsin-like: angle (0..0xFFF) -> 1.12 fixed */ +extern s32 func_8004787C(s32 a0); /* rcos-like: angle (0..0xFFF) -> 1.12 fixed */ +extern s32 func_8012B77C(s32 out, s32 from, s32 to); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8012C098(void *param_1); +extern s32 func_8012C0EC(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C750(s32 a0); +extern s32 func_8012C820(u8 *a0); +extern u16 D_801274E4[]; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern s32 func_8012CC88(); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012CC88(s32 a0, s32 a1, s32 a2); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DDA4(); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(s32 arg0); +extern void func_8012E138(); +extern void func_8012DFD4(u8 *a0); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012E014(s32 a0); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_80049CAC(); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern s32 func_80135888(); +extern void func_8012E138(int model); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern void func_8012E364(s32 arg0_); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8016AA50(int, int); +extern s32 func_8016B428(s32); +extern void func_80019064(void *); +extern void func_8012E9C0(int param_1); +extern void func_8012EA90(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern s32 aF8012EFB8(); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_80015954(s32 a0, s32 a1); +extern void func_8012F274(s32 a0, s32 a1); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void func_8004914C(); +extern void func_800491AC(); +extern s32 RotTransPers(s32, s32, s32*, s32*); +extern s32 * func_8012F40C(s32 *param_1, s32 param_2); +extern s32 * func_8012F49C(s32 *param_1, s32 param_2, s32 param_3); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_8012F8C8(int param_1); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern void func_80131B14(void); +extern void func_8012FCC4(int param_1); +extern void func_8012FDA8(int param_1); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern void func_8012CBF4(s32); +extern s32 func_80131D68(s32 a0, s32 a1); +extern void func_80130650(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130A18(u8 *a0); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void func_8012CBCC(s32); +extern void func_80131E00(struct S80131E00*, s32); +extern void func_80130C08(s32 arg0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_80131CF4(s32 a0); +extern void func_80019064(void *a0); +extern s32 aF80131CA8(); +extern s32 aF80131CF4(); +extern int func_80131D68(int a0, int a1); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void func_80131EEC(void *a0); +extern void func_80131F28(void *a0); +extern void func_80131F64(void *a0); +extern void func_80131FA0(void *a0); +extern void func_80131FDC(void *a0); +extern void func_8001C214(int, int); +extern void func_80132018(int param_1); +extern void func_801320D0(void); +extern void func_801320D8(int param_1); +extern void func_80132144(int param_1); +extern void func_801321B0(int param_1); +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void gteMIMefunc(); +extern void func_801325B8(int dst, int src, int m0, int mm, int arg5); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_80135888(s32, s32, s32, s32); +extern void func_80132F40(s32 arg0); +extern void func_801330E0(void * param_1, s16 * param_2, s32 param_3); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_801330E0(); +extern void func_8013339C(s16 *a0, s16 *a1); +extern void func_80133298(s32 *a0); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern s32 D_8019A77C[]; +void func_80136BC4(s32 a0); +extern void func_8013373C(int a0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133AB0(s16 flag, s16 x, s16 y, s32 arg3); +extern s32 func_80133CD4(); +extern s32 func_80134310(Vec3s *a0, Vec3s *a1, s32 a2); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_80134510(s32 param); +extern s32 func_801345F8(s32 arg); +extern s32 func_801347A0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int param_1, s16 param_2, s16 param_3, int param_4); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_801365B8(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void func_80136C54(void); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern u16 D_80126CC4; +extern M2C_UNK func_800153CC(M2C_UNK, u16, M2C_UNK, M2C_UNK, s32, s32); +extern void func_80136DFC(void); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80136F3C(s32 a0, s32 a1); +extern void func_80137030(s16 a0, s16 a1); +extern void func_80137178(s32 a0, s32 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 aF80137614(); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(int a0, int a1); +extern void func_801376C8(int a0); +extern void func_80139BE0(s32 a0); +extern void * aF801376E8(); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern void func_8013A860(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern s32 D_80127548[]; +extern s32 D_801269F0; +extern s16 D_801269F4; +extern s32 D_801269F8; +extern void func_80138BE0(s32 a0); +extern void func_80137BD8(s32 a0); +extern void func_8013A380(void); +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80137DD4(s32 ent, u8 *arg, u8 *work); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(u8 *arg0, u8 arg1, s32 arg2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void func_80138C30(void *a0); +extern void func_80139C7C(u8 *a0); +extern s32 func_8013A8FC(s32 arg0); +extern s32 func_80138C60(s32 arg0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_801395D4(void * a0); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 D_800A5E60; +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013AD38(void *flag, s32 a1, void *out2, void *out3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013DBE4(); +extern void func_8013D9B0(); +extern void func_8013D330(void); +extern void func_8013D178(void); +extern void func_8013CF68(void); +extern void func_8013CB84(void); +extern void func_8013CF68(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D53C(void *); +extern void func_8013DD68(void); +extern void func_8013D8FC(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_8013D53C(void *arg0v); +extern void func_800599B8(u16*); +extern void func_8013D9B0(int param_1); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern u8 *D_801274C8; +extern void func_8013E4B4(void); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern s32 func_8013F350(void); /* §30#2 widened (discarding caller) */ +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EF88(); +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern u16 D_8011511C; +extern u16 D_80115120; +extern u16 D_80115122; +extern s16 D_80115128; +extern s16 D_8011512A; +extern u16 D_8011512E; +extern u8 D_80115140[]; +extern s16 D_8011514E; +extern u8 D_80115152; +extern u8 D_80115158[]; /* macro-canonical redecl (§8e) */ +extern u8 D_8011515C; /* macro-canonical redecl (§8e) */ +extern u8 D_80183544[]; +extern u8 D_8018355C[]; +extern u16 D_80183460[]; +extern s32 func_80029178(s32 arg); +extern s32 func_800291B4(s32 arg); +extern void func_8014AA04(s32 a0); +extern void func_801415C0(s32 a0, s32 a1); +extern void func_80141C0C(s32 a0); +extern s32 func_80140608(s32 a0); +extern void func_801407F4(void); +extern s32 func_801416D4(s16); /* macro-canonical redecl (§8e) */ +extern s32 func_8013F350(void); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +extern short D_80115128; +extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2); +extern s32 func_8014032C(s32 param_1, s32 param_2); +extern u8 D_80115148[]; +extern u8 D_80062BDC; +extern s32 func_80028D58(void); +extern void func_80028D78(s32 a0); +extern s32 func_80028DE0(void); +extern void func_80028E00(s32 a0); +extern s32 func_80028FBC(void); +extern void func_80028FDC(s32 a0); +extern s32 func_80029000(void); +extern void func_80029020(s32 a0); +extern s32 func_80028D9C(void); +extern void func_80028DBC(s32 a0); +extern s32 *func_80140D68(s32 *, Prim4 *, s32, s32, s32); +extern s32 * func_80140958(); +extern s32 * func_80140D68(); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern int func_80029FE4(void); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); +extern int func_80141100(int param_1); +extern Prim_1412A8 * aF801412A8(); +extern void func_800291A0(s32, s32); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_801415C0(s32 param_1, s32 param_2); +extern u8 D_80115149[]; +extern u8 D_80115158[]; +extern u8 D_8011514D; +extern u8 D_8011515C; +extern s32 func_800D11F0(s32 a0); +extern s32 func_800D1658(s32 a0); +extern s32 func_801416D4(s16 param_1); +extern void func_8001903C(void); +extern void func_801417C4(void); +extern u8 D_800B9A16; +extern u16 D_80115114; +extern void func_801417F8(void); +extern void func_800D24A0(int); +extern void func_8002D4C8(int, int); +extern void func_80141C0C(int); +extern s32 func_801418F8(void); +extern s32 func_80141A60(); +extern void func_8013FAF8(s16, s16); +extern s32 D_801151D0; +extern u16 D_80115116; +extern void func_80141B90(void); +extern void func_80141C0C(s32 param_1); +extern s32 func_80015144(void); +extern unsigned char D_80112C04[]; +extern unsigned char D_80112C50[]; +extern unsigned char D_80112C9C[]; +extern unsigned char D_80112CE8[]; +extern unsigned char D_80112D38[]; +extern unsigned char D_80112D78[]; +extern unsigned char D_80112DBC[]; +extern unsigned char D_80112DF4[]; +extern unsigned char D_80112E14[]; +extern unsigned char D_80112E40[]; +extern unsigned char D_80112E6C[]; +extern unsigned char D_80112EBC[]; +extern unsigned char D_80112F0C[]; +extern unsigned char D_80112F48[]; +extern unsigned char D_80112F9C[]; +extern unsigned char D_80112FDC[]; +extern unsigned char D_8011302C[]; +extern unsigned char D_80113074[]; +extern unsigned char D_801130B8[]; +extern unsigned char D_801130E8[]; +extern unsigned char D_80113138[]; +extern unsigned char D_8011317C[]; +extern unsigned char D_801131A8[]; +extern unsigned char D_801131E8[]; +extern unsigned char D_80113214[]; +extern unsigned char D_80113254[]; +extern unsigned char D_80113278[]; +extern unsigned char D_801132B8[]; +extern unsigned char D_801132E4[]; +extern unsigned char D_80113324[]; +extern unsigned char D_80113360[]; +extern unsigned char D_801133A4[]; +extern unsigned char D_801133F4[]; +extern unsigned char D_80113440[]; +extern unsigned char D_80113474[]; +extern unsigned char D_801134B0[]; +extern unsigned char D_801134FC[]; +extern unsigned char D_80113530[]; +extern unsigned char D_80113554[]; +extern unsigned char D_801135A8[]; +extern unsigned char D_80113600[]; +extern unsigned char D_80113650[]; +extern unsigned char D_80113694[]; +extern unsigned char D_801136DC[]; +extern unsigned char D_80113724[]; +extern unsigned char D_80113744[]; +extern unsigned char D_80113770[]; +extern unsigned char D_80113794[]; +extern unsigned char D_801137D8[]; +extern unsigned char D_8011381C[]; +extern unsigned char D_8011383C[]; +extern unsigned char D_8011386C[]; +extern unsigned char D_801138A4[]; +extern unsigned char D_801138D0[]; +extern unsigned char D_80113900[]; +extern unsigned char D_80113944[]; +extern unsigned char D_80113964[]; +extern unsigned char D_8011399C[]; +extern unsigned char D_801139E8[]; +extern unsigned char D_80113A28[]; +extern unsigned char D_80113A50[]; +extern unsigned char D_80113A84[]; +extern unsigned char D_80113AB0[]; +extern unsigned char D_80113AE0[]; +extern unsigned char D_80113B34[]; +extern unsigned char D_80113B68[]; +extern unsigned char D_80113BA4[]; +extern unsigned char D_80113BC0[]; +extern unsigned char D_80113BF0[]; +extern unsigned char D_80113C20[]; +extern unsigned char D_80113C3C[]; +extern unsigned char D_80113C7C[]; +extern unsigned char * func_80141CA4(void); +extern void func_80142414(s32 a0, s16 a1); +extern void func_80142454(s32 a0); +extern void func_801424E4(short *param_1); +extern void func_801425CC(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern s32 func_8012AD50(void *a0); +extern void func_80142608(s32 param_1); +extern void func_801426D4(s32 a0); +extern void func_80142740(int param_1); +extern void func_80142778(u8 *a1); +extern void func_801427DC(void); +extern void func_801427E4(void); +extern void func_801427EC(int param_1); +extern s32 func_80142DB8(s32 *a0); +extern void func_80142BB4(s32 *a0, s32 a1, s32 a2); +extern void func_80142C9C(s32 *a0); +extern void func_80142838(s32 *a0); +extern s32 func_80142D38(s32 *a0); +extern void func_801428CC(s32 *a0); +extern void func_8014292C(int param_1); +extern void func_80142978(int param_1); +extern void func_801429C4(int param_1); +extern void func_80142A80(void); +extern void func_80142A10(int param_1); +extern void func_80142C84(s32 a0); +extern void func_80143994(s32 a0, s32 a1); +extern void func_80142B2C(void *arg0); +extern void func_801439C0(u8 *a0); +extern void func_80142BB4(s32* param_1, s32 param_2, s32 param_3); +extern void func_80142C7C(void); +extern void func_80142C9C(s32 * arg0); +extern void func_80142DC4(int param_1); +extern void func_80142E38(int param_1); +extern void func_80142EC0(s32 param_1); +extern void func_80142F68(s32 *a0); +extern void func_80142FFC(s32 *a0); +extern void func_8014305C(int param_1); +extern void func_801430F4(s32 *a0); +extern void func_80143188(s32 *a0); +extern int func_8001CA88(int, void *); +extern void func_800233CC(void *, unsigned short); +extern void func_801431E8(s32 param_1); +extern void func_801432FC(s32 *a0); +extern void func_80143390(s32 *a0); +extern void func_80143458(); +extern void func_801433F0(s32 a0); +extern void func_80143458(s32 param_1); +extern void func_8014358C(); +extern void func_8014350C(s32 *a0); +extern void func_8014358C(s32 param_1); +extern s32 rand(void); +extern void func_80143640(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801437D8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80143970(s32 a0); +extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); +extern s16 D_801152AC; +extern s16 D_801152AA; +extern void func_801439FC(s32 a0); +extern void func_80143B30(void *a0); +extern s32 func_80143B6C(s32 arg0, s32 arg1); +extern void func_80143BDC(u16 *a0); +extern void func_80143C38(void *a0); +extern void func_80143C74(s32 a0, s32 a1); +extern void func_80143C98(void *a0); +extern void ApplyMatrixSV(void*, Svec_801372B0*, Svec_801372B0*); +extern void func_80143D28(s32 param_1); +extern void func_80143E68(void *a0); +extern void func_80143EA4(void); +extern void func_80143EAC(void); +extern void func_80143EB4(void); +extern s32 func_8004787C(s32 a0); +extern void func_80143EBC(s32 a0); +extern void func_80144054(void *a0); +extern s32 func_80047948(s32 a0); +extern void func_80144090(s32 param_1); +extern void func_801442F8(int param_1); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80144364(int param_1); +extern void func_80144458(void *arg0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern void func_80144558(u8 *param_1); +extern void func_8014462C(u8 *a0); +extern void func_801446A4(int param_1); +extern void func_8014477C(void *param_1); +extern void func_80144880(s32 param_1); +extern void func_80144988(s32 a0); +extern void func_801449C8(void *a0); +extern void func_80144A04(s32 *a0); +extern void func_80144A2C(void *a0); +extern void func_80144A68(s32 *a0); +extern void func_80144A90(void); +extern void func_80144A98(u8 *a0); +extern int func_80144B14(int param_1); +extern void func_80144AEC(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern int func_80144B14(int param_s0); +/* ==== end §8b carried decl layer ==== */ + +INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0d", func_80144B9C); + +INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0d", func_801457A4);