diff --git a/config/overlays.mk b/config/overlays.mk
index d280ce8d9..25841fc0d 100644
--- a/config/overlays.mk
+++ b/config/overlays.mk
@@ -4915,7 +4915,7 @@ ov_MAIN_012_ELF := $(ov_MAIN_012_OUT).elf
ov_MAIN_012_MAPFILE := $(ov_MAIN_012_OUT).map
ov_MAIN_012_LD_SCRIPT := $(ov_MAIN_012_OUT).ld
ov_MAIN_012_SPLAT_YAML := config/splat.ov_MAIN_012.yaml
-ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,tail2.data.o,ov_MAIN_012_jr_80131340.o,tail3.data.o,ov_MAIN_012_jr_80135A4C.o,tail4.data.o,ov_MAIN_012_jr_80135EB0.o,tail5.data.o,ov_MAIN_012_jr_801380E0.o,tail6.data.o,ov_MAIN_012_jr_8013F350.o,tail7.data.o,ov_MAIN_012_jr_80159C84.o,tail8.data.o,ov_MAIN_012_jr_8015A3C8.o,tail9.data.o,ov_MAIN_012_jr_801789AC.o,tail10.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
+ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,tail2.data.o,ov_MAIN_012_jr_80131340.o,tail3.data.o,ov_MAIN_012_jr_80135A4C.o,tail4.data.o,ov_MAIN_012_jr_80135EB0.o,tail5.data.o,ov_MAIN_012_jr_801380E0.o,tail6.data.o,ov_MAIN_012_jr_8013F350.o,tail7.data.o,ov_MAIN_012_jr_801555F4.o,tail8.data.o,ov_MAIN_012_jr_80159C84.o,tail9.data.o,ov_MAIN_012_jr_8015A3C8.o,tail10.data.o,ov_MAIN_012_jr_801789AC.o,tail11.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_MAIN_012/ov_MAIN_012_jr_80131340.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_MAIN_012/ov_MAIN_012_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90
build/src/ov_MAIN_012/ov_MAIN_012_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
@@ -4941,7 +4941,7 @@ ov_SC02_037_ELF := $(ov_SC02_037_OUT).elf
ov_SC02_037_MAPFILE := $(ov_SC02_037_OUT).map
ov_SC02_037_LD_SCRIPT := $(ov_SC02_037_OUT).ld
ov_SC02_037_SPLAT_YAML := config/splat.ov_SC02_037.yaml
-ov_SC02_037_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_037.o,tail2.data.o,ov_SC02_037_jr_80131340.o,tail3.data.o,ov_SC02_037_jr_80135A4C.o,tail4.data.o,ov_SC02_037_jr_80135EB0.o,tail5.data.o,ov_SC02_037_jr_801380E0.o,tail6.data.o,ov_SC02_037_jr_8013F350.o,tail7.data.o,ov_SC02_037_jr_80159C84.o,tail8.data.o,ov_SC02_037_jr_8015A3C8.o,tail9.data.o,ov_SC02_037_jr_801789AC.o,tail10.data.o,ov_SC02_037_jr_8017AE2C.o,tail11.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
+ov_SC02_037_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_037.o,tail2.data.o,ov_SC02_037_jr_80131340.o,tail3.data.o,ov_SC02_037_jr_80135A4C.o,tail4.data.o,ov_SC02_037_jr_80135EB0.o,tail5.data.o,ov_SC02_037_jr_801380E0.o,tail6.data.o,ov_SC02_037_jr_8013F350.o,tail7.data.o,ov_SC02_037_jr_801555F4.o,tail8.data.o,ov_SC02_037_jr_80159C84.o,tail9.data.o,ov_SC02_037_jr_8015A3C8.o,tail10.data.o,ov_SC02_037_jr_801789AC.o,tail11.data.o,ov_SC02_037_jr_8017AE2C.o,tail12.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC02_037/ov_SC02_037_jr_80131340.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC02_037/ov_SC02_037_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90
build/src/ov_SC02_037/ov_SC02_037_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
@@ -4968,7 +4968,7 @@ ov_SC03_107_ELF := $(ov_SC03_107_OUT).elf
ov_SC03_107_MAPFILE := $(ov_SC03_107_OUT).map
ov_SC03_107_LD_SCRIPT := $(ov_SC03_107_OUT).ld
ov_SC03_107_SPLAT_YAML := config/splat.ov_SC03_107.yaml
-ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107.o,tail2.data.o,ov_SC03_107_jr_80131340.o,tail3.data.o,ov_SC03_107_jr_80135A4C.o,tail4.data.o,ov_SC03_107_jr_80135EB0.o,tail5.data.o,ov_SC03_107_jr_801380E0.o,tail6.data.o,ov_SC03_107_jr_8013F350.o,tail7.data.o,ov_SC03_107_jr_80159C84.o,tail8.data.o,ov_SC03_107_jr_8015A3C8.o,tail9.data.o,ov_SC03_107_jr_801789AC.o,tail10.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
+ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107.o,tail2.data.o,ov_SC03_107_jr_80131340.o,tail3.data.o,ov_SC03_107_jr_80135A4C.o,tail4.data.o,ov_SC03_107_jr_80135EB0.o,tail5.data.o,ov_SC03_107_jr_801380E0.o,tail6.data.o,ov_SC03_107_jr_8013F350.o,tail7.data.o,ov_SC03_107_jr_801555F4.o,tail8.data.o,ov_SC03_107_jr_80159C84.o,tail9.data.o,ov_SC03_107_jr_8015A3C8.o,tail10.data.o,ov_SC03_107_jr_801789AC.o,tail11.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC03_107/ov_SC03_107_jr_80131340.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_107/ov_SC03_107_jr_8013F350.o: JTBL_PADS := 0,0,4,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90
build/src/ov_SC03_107/ov_SC03_107_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
diff --git a/config/splat.ov_MAIN_012.yaml b/config/splat.ov_MAIN_012.yaml
index 8343601a9..9fbee17a3 100644
--- a/config/splat.ov_MAIN_012.yaml
+++ b/config/splat.ov_MAIN_012.yaml
@@ -99,6 +99,7 @@ segments:
- [0xdd58, c, ov_MAIN_012_jr_80135EB0]
- [0xff88, c, ov_MAIN_012_jr_801380E0]
- [0x171f8, c, ov_MAIN_012_jr_8013F350]
+ - [0x2d49c, c, ov_MAIN_012_jr_801555F4]
- [0x31b2c, c, ov_MAIN_012_jr_80159C84]
- [0x32270, c, ov_MAIN_012_jr_8015A3C8]
- [0x50854, c, ov_MAIN_012_jr_801789AC]
@@ -115,12 +116,14 @@ segments:
- [0x5ae88, data, tail6]
- [0x5b494, .rodata, ov_MAIN_012_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x5b538, data, tail7]
+ - [0x5b668, .rodata, ov_MAIN_012_jr_801555F4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+ - [0x5b688, data, tail8]
- [0x5b730, .rodata, ov_MAIN_012_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x5b764, data, tail8]
+ - [0x5b764, data, tail9]
- [0x5b768, .rodata, ov_MAIN_012_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x5b784, data, tail9]
+ - [0x5b784, data, tail10]
- [0x5ba40, .rodata, ov_MAIN_012_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x5bcec, data, tail10]
+ - [0x5bcec, data, tail11]
- [0x5DB24, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x5DB27] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
diff --git a/config/splat.ov_SC02_037.yaml b/config/splat.ov_SC02_037.yaml
index 8834250b6..d568cc682 100644
--- a/config/splat.ov_SC02_037.yaml
+++ b/config/splat.ov_SC02_037.yaml
@@ -99,6 +99,7 @@ segments:
- [0xdd58, c, ov_SC02_037_jr_80135EB0]
- [0xff88, c, ov_SC02_037_jr_801380E0]
- [0x171f8, c, ov_SC02_037_jr_8013F350]
+ - [0x2d49c, c, ov_SC02_037_jr_801555F4]
- [0x31b2c, c, ov_SC02_037_jr_80159C84]
- [0x32270, c, ov_SC02_037_jr_8015A3C8]
- [0x50854, c, ov_SC02_037_jr_801789AC]
@@ -116,14 +117,16 @@ segments:
- [0x9f36c, data, tail6]
- [0x9f978, .rodata, ov_SC02_037_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x9fa1c, data, tail7]
+ - [0x9fb4c, .rodata, ov_SC02_037_jr_801555F4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+ - [0x9fb6c, data, tail8]
- [0x9fc14, .rodata, ov_SC02_037_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x9fc48, data, tail8]
+ - [0x9fc48, data, tail9]
- [0x9fc4c, .rodata, ov_SC02_037_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x9fcc8, data, tail9]
+ - [0x9fcc8, data, tail10]
- [0x9ff24, .rodata, ov_SC02_037_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x9ff3c, data, tail10]
+ - [0x9ff3c, data, tail11]
- [0xa01d4, .rodata, ov_SC02_037_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0xa0238, data, tail11]
+ - [0xa0238, data, tail12]
- [0xA198C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0xA198F] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
diff --git a/config/splat.ov_SC03_107.yaml b/config/splat.ov_SC03_107.yaml
index a8bfd1c6a..fb50029ca 100644
--- a/config/splat.ov_SC03_107.yaml
+++ b/config/splat.ov_SC03_107.yaml
@@ -99,6 +99,7 @@ segments:
- [0xdd58, c, ov_SC03_107_jr_80135EB0]
- [0xff88, c, ov_SC03_107_jr_801380E0]
- [0x171f8, c, ov_SC03_107_jr_8013F350]
+ - [0x2d49c, c, ov_SC03_107_jr_801555F4]
- [0x31b2c, c, ov_SC03_107_jr_80159C84]
- [0x32270, c, ov_SC03_107_jr_8015A3C8]
- [0x50854, c, ov_SC03_107_jr_801789AC]
@@ -115,12 +116,14 @@ segments:
- [0x716a0, data, tail6]
- [0x71cac, .rodata, ov_SC03_107_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x71d50, data, tail7]
+ - [0x71e80, .rodata, ov_SC03_107_jr_801555F4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+ - [0x71ea0, data, tail8]
- [0x71f48, .rodata, ov_SC03_107_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x71f7c, data, tail8]
+ - [0x71f7c, data, tail9]
- [0x71f80, .rodata, ov_SC03_107_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x71f9c, data, tail9]
+ - [0x71f9c, data, tail10]
- [0x72258, .rodata, ov_SC03_107_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- - [0x72504, data, tail10]
+ - [0x72504, data, tail11]
- [0x73BE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x73BE7] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
diff --git a/src/ov_MAIN_012/ov_MAIN_012_jr_8013F350.c b/src/ov_MAIN_012/ov_MAIN_012_jr_8013F350.c
index 54264a833..d85e7d3ac 100644
--- a/src/ov_MAIN_012/ov_MAIN_012_jr_8013F350.c
+++ b/src/ov_MAIN_012/ov_MAIN_012_jr_8013F350.c
@@ -6953,1036 +6953,3 @@ void func_80155580(void *a0) {
DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555bc (src/shared) */
-
-
-INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_801555F4);
-
-DEFINE_func_80155800() /* dedup: shared engine-core @0x80155800 (src/shared) */
-
-
-DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155a44 (src/shared) */
-
-
-DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155b20 (src/shared) */
-
-
-DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155b9c (src/shared) */
-
-
-DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155c0c (src/shared) */
-
-
-DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155c64 (src/shared) */
-
-
-DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155d70 (src/shared) */
-
-
-DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155e30 (src/shared) */
-
-
-DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155ea4 (src/shared) */
-
-
-void func_80155F58(void) {
-}
-
-DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155f60 (src/shared) */
-
-
-DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155f80 (src/shared) */
-
-
-DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155fb0 (src/shared) */
-
-
-DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155fd4 (src/shared) */
-
-
-DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155ff8 (src/shared) */
-
-
-
-void func_80156044(int param_1, int param_2)
-{
- extern u32 func_8015616C(s32 a0, u16 a1);
- extern void func_80156670(s32, s32, s32, s32, s32, u16);
- extern void func_801567BC(s32 a0);
- extern void func_80156848(s32, s32);
- extern void func_80156A88(s32 a0, s32 a1);
- extern s32 func_801565C0(void);
- extern u8 D_801803A8;
- extern u8 D_801803BC;
- extern u8 D_80180240;
-
- register s32 puVar2 __asm__("$2");
- register s32 iVar3 __asm__("$3");
- u8 *puVar4;
- s32 uVar1;
-
- if (((u32)param_2) & 0x10000) {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_801803A8;
- } else if (((u32)param_2) & 0x20000) {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_801803BC;
- } else {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_80180240;
- }
- puVar4 = (u8 *)(iVar3 + puVar2);
- uVar1 = func_8015616C(((s32)param_1), *(u16 *)puVar4) & 0xffff;
- if (*(u8 *)(((s32)param_1) + 0x1a8) != 0) {
- ((void (*)(s32, s32, s32, s32, s32, s32))func_80156670)(((s32)param_1), *(s32 *)puVar4, uVar1, *(s32 *)(puVar4 + 4),
- *(u8 *)(puVar4 + 0xA), *(u16 *)(puVar4 + 0x12));
- if (*(u8 *)(puVar4 + 0x10) != 0) {
- func_801567BC(((s32)param_1));
- }
- ((void (*)(s32, s32, s32))func_80156848)(((s32)param_1), (s32)puVar4, uVar1);
- func_80156A88(((s32)param_1), (s32)puVar4);
- if (((s32 (*)(s32))func_801565C0)(((s32)param_1)) != 0) {
- *(u8 *)(((s32)param_1) + 0x1c0) = 1;
- }
- }
-}
-
-
-DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616c (src/shared) */
-
-
-DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */
-
-
-
-
-S801563EC *func_801563EC(u16 idx) {
-
- extern S801563EC D_801803E4[];
- return &D_801803E4[idx];
-}
-
-
-DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640c (src/shared) */
-
-
-DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564b0 (src/shared) */
-
-
-DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565c0 (src/shared) */
-
-
-DEFINE_func_80156600() /* dedup: shared engine-core @0x80156600 (src/shared) */
-
-DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */
-
-
-
-DEFINE_func_80156670() /* dedup: shared engine-core @0x80156670 (src/shared) */
-
-
-DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567bc (src/shared) */
-
-
-DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */
-
-
-DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156a14 (src/shared) */
-
-
-
-// @class: struct
-// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180654 indexed halfword folds %lo
-extern void func_80147324(s32 arg0);
-
-void func_80156A1C(s32 param_1, s32 param_2)
-{
-
- extern unsigned char D_8011520C[];
- extern unsigned short D_80180654[];
- if (*(unsigned char *)(param_1 + 0xDA) == 0) {
- func_80147324(D_80180654[D_8011520C[param_2]]);
- *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1;
- }
-}
-
-
-DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156a88 (src/shared) */
-
-
-DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156b74 (src/shared) */
-
-
-DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ecc (src/shared) */
-
-
-DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156fa8 (src/shared) */
-
-
-DEFINE_func_80157158() /* dedup: shared engine-core @0x80157158 (src/shared) */
-
-
-DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571c4 (src/shared) */
-
-
-DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574dc (src/shared) */
-
-
-DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */
-
-
-
-
-void func_80157544(void *a0) {
-
- extern void (*D_80180664[])(void);
- D_80180664[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */
-
-
-DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575e4 (src/shared) */
-
-
-DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576a8 (src/shared) */
-
-
-DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771c (src/shared) */
-
-
-DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773c (src/shared) */
-
-
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_801578C0(s32 a0);
-
-void func_80157788(s32 *a0)
-{
- /* [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_80184280;
- D_80184280 = 0x12C;
- func_80147078(a0, 7);
- func_801578C0((s32)a0);
-}
-
-
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80157808(s32 *a0);
-
-void func_801577C8(s32 *a0)
-{
- /* [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_80184280;
- D_80184280 = 0x12C;
- func_80147078(a0, 7);
- func_80157808(a0);
-}
-
-
-INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_80157808);
-
-DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274
-
-extern void func_80156648(s32 *a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_80147324(s32 arg0);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_80146CA0(void *a0);
-extern s32 func_801725A4(u8 *a0);
-
-void func_801578C0(s32 param_1)
-{
-
- extern u8 D_800D5128;
- extern u8 D_8018066C;
- ((void (*)(void))func_80156648)();
- *(u8 *)(param_1 + 0x1AA) = 9;
- func_80154274((s32 *)param_1, (s32)&D_800D5128);
- ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15);
- func_80147324(0xC20);
- ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018066C);
- ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0);
- ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0);
- ((void (*)(s32 *))func_80146CA0)((s32 *)param_1);
- ((void (*)(s32 *))func_801725A4)((s32 *)param_1);
-}
-
-
-
-// @class: other
-// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only
-// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves
-// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT
-// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16
-// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH.
-
-extern void func_80147A10(int a0, int a1);
-extern void func_80147A84(int);
-extern void func_801473EC(s32 *a0);
-extern void func_80148038(int, int);
-extern void func_80147460(int);
-extern void func_8014ED28(s32 _arg0);
-extern void func_80146D90(int);
-extern void func_80161450(void *a0);
-extern void func_80157A8C(int);
-extern void func_80146E90(s32 *a0, s32 a1);
-extern void func_80146CA0(void *a0);
-extern int func_80155FF8(int arg, int a1);
-extern void func_80154A74(int, int);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_801477E8(s32 *a0, s32 a1);
-extern s32 func_801725A4(u8 *a0);
-
-
-void func_8015795C(int param_1)
-{
-
- extern unsigned char D_800D5178;
- extern unsigned char D_8018067C;
- int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */
- int iVar1;
- unsigned int uVar2;
-
- *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2;
- ((int (*)(int, int))func_80147A10)(param_1, 0x400);
- if (*(int *)(param_1 + 0x2c) >= 0) {
- *(int *)(param_1 + 0x2c) = 0;
- }
- func_80147A84(param_1);
- ((void (*)(int))func_801473EC)(param_1);
- func_80148038(param_1, 0x1a000);
- func_80147460(param_1);
- iVar1 = ((int (*)(int))func_8014ED28)(param_1);
- if (iVar1 != 0) {
- func_80146D90(param_1);
- }
- uVar2 = ((int (*)(int))func_80161450)(param_1);
- if ((uVar2 & 5) != 0) {
- func_80157A8C(param_1);
- ((void (*)(int, int))func_80146E90)(param_1, 8);
- ((void (*)(int))func_80146CA0)(param_1);
- }
- if (uVar2 == 0) {
- ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa));
- if (*(unsigned char *)(param_1 + 0x1c0) != 0) {
- func_80154A74(param_1, 0x17);
- ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178);
- ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018067C);
- ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000);
- *(short *)(param_1 + 2) = 4;
- }
- ((void (*)(int))func_801725A4)(param_1);
- }
- return;
-}
-
-
-DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157a8c (src/shared) */
-
-
-DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157ac8 (src/shared) */
-
-
-DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157b74 (src/shared) */
-
-
-DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157bc8 (src/shared) */
-
-
-DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157ccc (src/shared) */
-
-
-
-/* func_80157D20 — 21-ins plumbing shim (×138 overlays).
- *
- * §71 sibling-first: the immediate neighbour func_801578C0 in this very TU
- * (src/ov_SC01_077/ov_SC01_077_jr_80154C24.c L1592) already matches with
- * `((void (*)(void))func_80156648)();` — the zero-argument call form. The
- * target likewise sets up NO argument registers before `jal func_80156648`
- * ($a0/$a1 still carry this function's own incoming args), so the call is
- * argument-less here too.
- *
- * The `lhu %lo(D_801806BC)($at)` with `sll $s0,$s0,1` => a plain u16 array
- * indexed by the second parameter, NOT hoisted into a pointer (§20: a pointer
- * var would keep one address register live across the call; the target rebuilds
- * the %hi/%lo pair inline after the call returns).
- *
- * §73 PARAMS axis / §42 lever 6 — the fleet canon for this symbol is
- * `extern void func_80157D20(void);` (this TU's carried decl layer, L399, and
- * every sibling overlay's). A 2-param definition hard-errors with
- * `conflicting types` in the real TU (rtu_match, byte-verified), and the canon
- * cannot be widened from a draft (that is an R22 fleet edit). So keep the
- * `(void)` signature and capture $a0/$a1 with register pins copied into NORMAL
- * pseudos — the copies are live across `jal func_80156648`, so they get the
- * callee-saved homes the target uses ($s1 = a0, $s0 = a1). A direct
- * `register` use would leave the values in call-clobbered $a0/$a1.
- */
-
-extern void func_80156648(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80157D74(u16 *a0);
-
-void func_80157D20(void)
-{
-
- extern u16 D_801806BC[];
- register void *a0v __asm__("$4");
- register s32 a1v __asm__("$5");
- void *param_1 = a0v;
- s32 param_2 = a1v;
-
- ((void (*)(void))func_80156648)();
- ((void (*)(void *, s32))func_80147078)(param_1, D_801806BC[param_2]);
- ((void (*)(void *))func_80157D74)(param_1);
-}
-
-
-DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157d74 (src/shared) */
-
-
-
-
-void func_80157DC4(void *a0) {
-
- extern void (*D_801806CC[])(void);
- D_801806CC[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157e00 (src/shared) */
-
-
-DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157e38 (src/shared) */
-
-
-DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157ea4 (src/shared) */
-
-
-DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157f64 (src/shared) */
-
-
-
-
-void func_80157FC4(void *a0) {
-
- extern void (*D_801806D4[])(void);
- D_801806D4[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots
-
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_80147324(s32 arg0);
-extern void func_80146CA0(void *a0);
-
-
-void func_80158038(void * param)
-{
-
- extern s32 D_800D51E0;
- extern s32 D_801806A0;
- *(u8 *)(param + 0x1aa) = 0xe;
- func_80154274((s32 *)param, (s32)&D_800D51E0);
- func_80154A74(param, 0x15);
- func_80146DB8((s32 *)param, &D_801806A0);
- *(s32 *)(param + 0x234) = 0;
- func_80146994(5, param, 0xc, 0);
- func_80147324(0x455);
- func_80146CA0((void *)param);
-}
-
-
-DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580b4 (src/shared) */
-
-
-DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581ac (src/shared) */
-
-
-
-
-void func_8015824C(void *a0) {
-
- extern void (*D_801806E0[])(void);
- D_801806E0[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */
-
-
-DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582c0 (src/shared) */
-
-
-DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */
-
-
-
-// @class: other
-// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code)
-
-extern void func_8014CBF8(void *a0);
-extern void func_801474EC(s32 *a0);
-extern void func_801477E8(s32 *a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_80148038(s32 a0, s32 a1);
-extern void func_80147460(s32 a0);
-extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_801473EC(s32 *a0);
-extern s32 func_801615C4(void *a0, s32 a1);
-extern s32 func_80146E98(s32 a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80146CA0(void *a0);
-extern int func_80155FF8(int arg, int a1);
-
-
-void func_80158434(s32 param_1)
-{
-
- extern u8 D_801806B0;
- extern u8 D_800D533C;
- u32 uVar1;
- u32 uVar2;
- s32 frame_pad[4];
- (void)&frame_pad;
-
- *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2;
- if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) {
- *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1;
- ((s32 (*)(void))func_8014CBF8)();
- ((void (*)(s32))func_801474EC)(param_1);
- ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000);
- ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801806B0);
- }
- if (*(s32 *)(param_1 + 0x234) != 0) {
- func_80148038(param_1, 0x10000);
- func_80147460(param_1);
- func_80147AD4(param_1, 0, 0, 0);
- ((void (*)(s32))func_801473EC)(param_1);
- }
- uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0);
- if (uVar1 != 0) {
- if (uVar1 == 1) goto LAB_80158508;
- uVar2 = uVar1 & 0x2000;
- } else {
- uVar2 = func_80146E98(param_1);
- }
- if (uVar2 == 0) goto LAB_80158528;
-LAB_80158508:
- ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C);
- ((void (*)(s32))func_80146CA0)(param_1);
- return;
-LAB_80158528:
- ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA));
-}
-
-
-DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */
-
-
-DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585a4 (src/shared) */
-
-
-DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585ac (src/shared) */
-
-
-DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585ec (src/shared) */
-
-
-
-// @class: loose-typing
-// @stuck: none — MATCH (87 ins, match_one) + symcheck SYMS-OK (17 symbols agree); same file also
-// MATCHes verbatim against ov_SC03_099 and ov_SC06_008 (sibling asm bodies are identical)
-
-/* func_80158638 @ 0x80158638 — ov_SC01_077 / ov_SC01_077_jr_80154C24 (87 ins).
- *
- * TWO decl-ROBUSTNESS choices in the BODY, deliberate — these are the only two things the gate's
- * decl ladder (cast_call_sites/reconcile_tu/sig_unify) CANNOT repair, because they change codegen,
- * not plumbing. Both are load-bearing for templating this exemplar onto its 138 h_seq siblings,
- * where each overlay TU carries its own spelling of these decls:
- *
- * 1) `*(u16 *)&D_80078EB4` — the target loads it with `lhu`. The ov_SC01_077 TU already carries
- * `extern s16 D_80078EB4;` (line 504), and a plain `D_80078EB4 != 0` read through an s16 decl
- * compiles to `lh` => WIDTH/lh!=lhu, closeness 1. A `(u16)` cast does NOT fix it (gcc-2.7.2
- * folds the zero_extend away for a !=0 test and keeps `lh`); the pointer pun does, and it is
- * correct under EITHER declared signedness.
- * 2) `(s16)func_80159464(...)` with the fleet-canonical `extern s32 func_80159464();` decl.
- * The target truncates the return to 16 bits at BOTH call sites (`sll 16` + `blez`, then
- * `sll 16`/`sra 16`/`slti 6`). Declaring the callee `s16` also matches, but the fleet's carried
- * decl layer spells it `extern s32 func_80159464(void);` in 1600 places — if reconcile_tu wins
- * that conflict the truncation vanishes and the match dies. The explicit cast makes the body
- * independent of which decl survives.
- *
- * Symbols verified present in build/ov_SC01_077/undefined_syms_auto.txt:
- * D_80078EB4=0x80078EB4 D_800B9A17=0x800B9A17 D_800B9A64=0x800B9A64 D_80110EC0=0x80110EC0
- */
-
-
-DEFINE_func_80158638() /* dedup: shared engine-core @0x80158638 (src/shared) */
-
-
-void func_80158794(void) {
-}
-
-
-// @class: plumbing
-// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order)
-
-extern void func_80147084(s32 *a0);
-extern void func_80147098(s32 *a0);
-extern void func_801470AC(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80146C98(s32 *a0, s16 a1);
-extern void func_80158880(s32 *param);
-
-void func_8015879C(s32 param_1) {
-
- extern s32 D_80184288;
- extern s32 D_80184294;
- extern s32 D_80184298;
- D_80184288 = 0;
- D_80184294 = 1;
- D_80184298 = 0;
- *(u8 *)(param_1 + 0xa8) = 0;
- ((void (*)(void))func_80147084)();
- ((void (*)(s32))func_80147098)(param_1);
- ((void (*)(s32))func_801470AC)(param_1);
- ((void (*)(s32, s32))func_80147078)(param_1, 0x1a);
- ((void (*)(s32, s32))func_80146C98)(param_1, 1);
- ((void (*)(s32))func_80158880)(param_1);
-}
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order)
-
-extern void func_80147084(s32 *a0);
-extern void func_80147098(s32 *a0);
-extern void func_801470AC(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80158880(s32 *param);
-
-void func_80158814(void *arg0) {
-
- extern s32 D_80184288;
- extern s32 D_80184294;
- extern s32 D_80184298;
- D_80184288 = 0;
- D_80184294 = 1;
- D_80184298 = 0;
- *(s8 *)((s32)arg0 + 0xA8) = 0;
- ((void (*)(void))func_80147084)();
- ((void (*)(void *))func_80147098)(arg0);
- ((void (*)(void *))func_801470AC)(arg0);
- ((void (*)(void *, s32))func_80147078)(arg0, 0x1A);
- ((void (*)(void *))func_80158880)(arg0);
-}
-
-
-
-extern void func_80149020(s32 *a0);
-
-void func_80158880(s32 *param) {
-
- extern void (*D_8018071C[])(s32 *);
- func_80149020(param);
- D_8018071C[*(u8 *)((s32)param + 0x4F)](param);
-}
-
-
-INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_801588CC);
-
-DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158ab4 (src/shared) */
-
-
-DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158ae4 (src/shared) */
-
-
-
-extern void func_80146CA0(void *a0);
-extern s32 func_801472C8(struct S *a0);
-extern void func_80147324(s32 a0);
-extern void func_801474D8(s32 *a0);
-extern void func_801474EC(s32 *a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-
-void func_80158BB0(void *arg0) {
-
- extern M2C_UNK D_800D58D8;
- extern s32 D_80184288;
- if (D_80184288 == 0) {
- D_80184288 = 1;
- }
- func_80147324(0x456);
- func_80154274(arg0, &D_800D58D8);
- func_80154A74(arg0, 0x16);
- M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000;
- M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0;
- func_801474EC(arg0);
- func_801474D8(arg0);
- func_801472C8(arg0);
- func_80146CA0(arg0);
-}
-
-
-DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158c40 (src/shared) */
-
-
-DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158cd8 (src/shared) */
-
-
-DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158d60 (src/shared) */
-
-
-DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158e24 (src/shared) */
-
-
-
-// @class: other
-// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot)
-
-
-extern int rand(void);
-extern s32 func_8013767C(s32 a0);
-extern void func_80146CA0(void *a0);
-
-void func_80158F00(int param_1) {
-
- extern s32 D_80184294;
- extern s32 D_801806F0[];
- int *self = (int *)param_1;
- struct Actor *act = (struct Actor *)self[0x20 / 4];
- int gate = D_80184294;
-
- act->timer = (u16)((act->timer + 0x16) & 0xfff);
-
- if (gate == 0) {
- s32 r = rand();
- *(s32 *)(param_1 + 0x198) = func_8013767C(D_801806F0[r % 0xb]);
- ((void (*)(int))func_80146CA0)(param_1);
- }
-}
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464
-// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used
-// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz
-// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C);
-// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg.
-
-
-extern u16 func_80148800(s32 *a0);
-extern s32 func_801399F0(s32);
-extern void func_80139914(s32);
-extern s32 func_80159464(void);
-extern void func_801594E8(s32, s32);
-extern void func_80146C98(s32 *a0, s16 a1);
-extern s32 func_8013767C(s32 a0);
-extern void func_80146CA0(void *a0);
-
-void func_80158FA4(s32 param_1)
-{
-
- extern s32 D_80184298;
- extern u8 D_80110C3C[];
- s32 v0;
- s16 sVar1;
-
- v0 = *(s32 *)(param_1 + 0x20);
- *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff;
- if (((s32 (*)(void))func_80148800)() & 0xf0) {
- D_80184298 = 1;
- }
- if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) {
- func_80139914(*(s32 *)(param_1 + 0x198));
- *(s32 *)(param_1 + 0x198) = 0;
- sVar1 = ((s32 (*)(s32))func_80159464)(param_1);
- if (sVar1 != 0) {
- func_801594E8(param_1, sVar1);
- ((void (*)(s32, s32))func_80146C98)(param_1, 0xc);
- } else {
- *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C));
- ((void (*)(s32))func_80146CA0)(param_1);
- }
- }
-}
-
-
-DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */
-
-
-DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */
-
-
-DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592cc (src/shared) */
-
-
-
-extern void func_80145BF8(void);
-extern void func_80146CA0(void *a0);
-
-void func_8015934C(void *arg0) {
-
- extern u8 D_800AE6BD;
- extern s32 D_80184288;
- extern s32 D_80184290;
- void *temp_v1;
-
- if (D_80184288 == 4) {
- D_80184288 = 5;
- }
- if (D_80184290 != 0) {
- func_80145BF8();
- func_80146CA0(arg0);
- D_800AE6BD += 1;
- }
- temp_v1 = M2C_FIELD(arg0, void **, 0x20);
- M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF);
-}
-
-
-DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593e4 (src/shared) */
-
-
-DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */
-
-
-DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */
-
-
-
-extern s16 currentLocationId;
-extern s32 func_80029A94(s32);
-
-
-s32 func_80159464(void) {
-
- extern Entry D_80180758[];
- Entry *e;
-
- e = D_80180758;
- while (e->id != 0) {
- if (currentLocationId == e->id) {
- return e->val;
- }
- e++;
- }
- if (func_80029A94(1) != 0) {
- goto ret0;
- }
- if (func_80029A94(0) != 0) {
- goto ret0;
- }
- return -1;
-ret0:
- return 0;
-}
-
-
-INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_801594E8);
-
-
-
-void func_80159698(void *a0) {
-
- extern void (*D_8018096C[])(void);
- D_8018096C[*(u8 *)((s32)a0 + 0x15)]();
-}
-
-
-DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596d4 (src/shared) */
-
-
-
-// @class: iv-combine
-// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8;
-// p gcc emits the
-// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a
-// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual
-// guarded do-while `if(base+0x2A8= ab + 0x22) {
- *q |= orc;
- }
- q += 0x21;
- } while (q < (u32 *)(base + 0x65AC));
- }
-
- (*(s16 *)&D_801270C0) = 3;
- ((void (*)(s32))func_80129248)(0);
- func_8013C938();
- func_8013CB20();
- func_8013C98C();
- func_8002850C(0x800, 0x800, 0x800);
- func_80028620(0, &(*(u8 *)&D_8018078C));
- func_80028620(1, &(*(u8 *)&D_8018078C) + 0x10);
- func_80028620(2, &(*(u8 *)&D_8018078C) + 0x20);
- *(s32 *)(param_1 + 0x28) = 0xff;
- *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
- }
- return 0;
-}
-
-
-DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */
-
-
-DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987c (src/shared) */
-
-
-DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598bc (src/shared) */
-
-
-DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598e0 (src/shared) */
-
-
-
-
-void func_80159968(void *a0) {
-
- extern void (*D_80180A10[])(void);
- D_80180A10[*(u8 *)((s32)a0 + 0x4D)]();
-}
-
-
-
-
-void func_801599A4(void *a0) {
-
- extern void (*D_80180A1C[])(void);
- D_80180A1C[*(u16 *)((s32)a0 + 0x0)]();
-}
-
-
-DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
-
-
-void func_80159A18(void) {
-}
-
-INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_80159A20);
-
-DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
-
-
-DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159b3c (src/shared) */
-
-
-
-
-void func_80159B70(void *a0) {
-
- extern void (*D_80180B64[])(void);
- D_80180B64[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159bac (src/shared) */
-
-
-
-// @class: schedule
-// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a
-// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm
-// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch
-// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`.
-
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_80154150(s32 a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_801553C0(s32 a0);
-extern void func_801553A8(s32 *a0);
-extern s32 func_80172590(u8 *a0);
-extern void func_80146CA0(void *a0);
-
-
-void func_80159BE4(s32 arg0)
-{
-
- extern unsigned char D_80180980;
- int v;
-
- ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180980);
- if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) {
- func_80154150(arg0, 5);
- func_80154A74(arg0, 0x1C);
- } else {
- func_80154150(arg0, 4);
- func_80154A74(arg0, 0x11);
- }
- *(int *)(arg0 + 0x234) = 0;
- *(int *)(arg0 + 0x238) = 0;
- func_801553C0(arg0);
- ((void (*)(int))func_801553A8)(arg0);
- ((void (*)(int))func_80172590)(arg0);
- ((void (*)(int))func_80146CA0)(arg0);
-}
diff --git a/src/ov_MAIN_012/ov_MAIN_012_jr_801555F4.c b/src/ov_MAIN_012/ov_MAIN_012_jr_801555F4.c
new file mode 100644
index 000000000..72e61c4d1
--- /dev/null
+++ b/src/ov_MAIN_012/ov_MAIN_012_jr_801555F4.c
@@ -0,0 +1,3108 @@
+#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(void);
+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 s32 D_80126AEC;
+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_800B9AAC[];
+extern s16 D_800B9AAE[];
+extern s16 D_800B9AB0[];
+extern s16 D_800B9AB2[];
+extern s16 D_800B9AB4[];
+extern s16 D_800B9AB6[];
+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 u8 D_80126948[];
+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 u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
+extern s32 D_80126FA8[];
+extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
+extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
+extern s32 D_800AE688[];
+extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
+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 s32 D_801151D4;
+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 *D_80126B78;
+extern s32 *D_80126B90;
+extern s32 D_80126B58;
+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 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_801274D4;
+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_80184124;
+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 u8 D_800AF630[];
+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 s32 D_80127520;
+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 s32 D_801151D0;
+extern u16 D_8011511A;
+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_8017F41C[];
+extern u8 D_8017F434[];
+extern u16 D_8017F338[];
+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 short D_80115128;
+extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2);
+extern s32 func_8014032C(s32 param_1, s32 param_2);
+extern s32 func_80028D58(void);
+extern s32 func_80028DE0(void);
+extern s32 func_80028FBC(void);
+extern s32 func_80029000(void);
+extern s32 func_80028D9C(void);
+extern s16 func_8014168C(s16);
+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 void func_80140E6C(void);
+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 void func_80140F00(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_80115148[];
+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 u16 D_80115116;
+extern void func_80141B90(void);
+extern u8 D_8017F6D4[];
+void func_8002D4C8(s32 a0, s32 a1);
+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 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);
+extern void func_801458E0(void);
+extern s32 D_800AE6AC;
+extern s32 D_800AE6B0;
+extern s16 D_800B9A0A;
+extern u8 D_80078E50;
+extern void func_800D185C(u8 *a0);
+extern void func_801458E8(void);
+extern void func_80145B24(void);
+extern void func_80145934(void);
+extern void func_80145A2C(void);
+extern void func_80162120(void);
+extern void func_80029124(s32, s32);
+extern s32 func_80165A50(s32);
+extern void func_80029514(s32);
+extern u8 D_80078EC0;
+extern void func_80145BF8(void);
+extern void func_80145C54(void);
+extern void func_80146014(s32 a0);
+extern void func_80145EE8(s32 param_1);
+extern void MoveImage(void *a0, s32 a1, s32 a2);
+extern s32 func_80146128(void);
+extern void func_80146360(void);
+extern void func_801463A0();
+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 u8 D_80126BA4;
+extern void (*D_8017FE70[])(void *);
+extern void func_8014C6F4();
+extern void func_80155150(s32 a0);
+extern void func_801470C0(s32 a0);
+extern void func_80147478(s32 a0);
+extern void func_80147118(s32 a0);
+extern void func_8014BDE8(s32 a0);
+extern short func_801508F8(s32 a0);
+extern void func_8014B5B0(s32 *a0);
+extern void func_80161D88(s32 a0);
+extern void func_801463A0(void);
+extern s32 D_80127098;
+extern s32 D_80127094;
+extern s32 D_80127090;
+extern void func_80146534(void);
+extern void func_8001D074(s32 a0, s32 a1);
+extern void func_80146554(void);
+extern void func_80146578(void);
+extern void func_8001CFDC(s32, s32);
+extern void func_8014659C(void);
+extern void func_8001D074(s32, s32);
+extern void func_801465C0(void);
+extern void func_801465E4(void);
+extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8);
+extern s32 D_8011F9D0;
+extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13);
+extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5);
+extern u16 *func_80146750(u16 *param_1);
+extern u16 *func_8014680C(short *param_1);
+extern void aF801466F0(u16 a0, s32 a1, u16 a2, u16 a3, u16 sp5, s32 sp6, s32 sp7, s32 sp8) __asm__("func_801466F0");
+extern void aF801466F0(u16 a0, s32 a1, u16 a2, u16 a3, u16 sp5, s32 sp6, s32 sp7, s32 sp8);
+extern unsigned short D_8011FD10;
+extern int D_8011FA1C;
+extern unsigned short D_8011F9D6;
+extern unsigned short D_8011F9DA;
+extern unsigned short D_8011F9DE;
+extern int D_8011FA20;
+extern int D_8011FA24;
+extern unsigned short * func_80146750(unsigned short *a0);
+extern unsigned short * func_8014680C(short *param_1);
+extern s32 D_8011F750;
+extern s32 D_8011F754;
+extern u8 * func_801468C8(s32 arg0, u8 arg1);
+extern s32 D_8011D030;
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5);
+extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8);
+extern void func_80146AFC(void*);
+extern void aF80146A6C();
+extern s32 func_80146B9C(void *a0);
+extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6);
+extern s32 func_80146B9C(void * arg0);
+extern s32 aF80146AFC();
+extern u16 D_8011DA28;
+extern void func_80146C3C(u8 *a0);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern void func_80146CA0(void *a0);
+extern void func_80146CB4(void *a0);
+extern void func_80146CC8(s32 a0);
+extern void func_80146D30(s32 a0);
+extern void func_80146D80(s32 *a0);
+extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146D90(s32 a0);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern s32 func_80146E98(s32 a0);
+extern void func_80149374(s32 a0, s32 a1);
+extern void func_80146F58(s32 a0, s32 a1);
+extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_8014704C(s32 *a0);
+extern s32 func_80147054(void *a0);
+extern void func_80147060(u8 * a0);
+extern void func_8014706C(void *arg0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80147084(s32 *a0);
+extern void func_8014708C(void *arg0);
+extern s32 func_801470A0(void *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_801470B4(s32 arg0);
+extern s16 D_80126BB8;
+extern s16 D_80126BBA;
+extern s16 D_80126BBC;
+extern void func_80147264(s32 a0);
+extern void func_80147290(void);
+extern void func_801472B4(void *a0);
+extern s32 func_801472C8(struct S *a0);
+extern void *D_8012707C;
+extern void func_801472DC(void);
+extern void func_801472F0(void *a0);
+extern void func_80147364();
+extern void func_80147300(u16 arg0);
+extern void func_80147324(s32 arg0);
+extern void func_80015978(s32, s32*);
+extern s32 aF8012E5CC(s32, s32, s32) __asm__("func_8012E5CC");
+extern void aF80147364();
+extern void func_801473EC(s32 *a0);
+extern void func_80147460(s32 a0);
+extern void func_80147514();
+extern void func_80147628(s32 a0);
+extern void func_801474D8(s32 *a0);
+extern void func_801474EC(s32 *a0);
+extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2);
+extern s32 func_800129CC(s32 a0, s32 a1);
+extern void func_80147514(s32 arg0);
+extern void func_80013F3C(s32 a0);
+extern void func_80012558(s32 a0, s32 a1);
+extern void func_800126C4(s32 a0, s32 a1);
+extern void func_800123F0(s32 a0, s32 a1);
+extern void func_80147718(s32 a0);
+extern void func_80147788(void *a0, s32 a1);
+extern void func_801477A8(void *a0, s32 a1);
+extern void func_801477C8(void *a0, s32 a1);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern void func_80147814(s32 a0, s32 a1);
+extern void func_80147928(int a0, int a1);
+extern void func_8014799C(int a0, int a1);
+extern void func_80147A10(int a0, int a1);
+extern void func_80147860(int a0, int a1, int a2, int a3);
+extern void func_80147948(s32 a0, s32 a1, s32 a2);
+extern void func_801479BC(s32 a0, s32 a1, s32 a2);
+extern void func_80147A30(s32 a0, s32 a1, s32 a2);
+extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147948(int a0, int a1, int a2);
+extern void func_801479BC(int a0, int a1, int a2);
+extern void func_80147A30(int a0, int a1, int a2);
+extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147A84(s32 arg0);
+extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147AAC(s32 arg0);
+extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
+extern void func_80147B5C(s32 a0, void *a1);
+extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4);
+extern void func_80147B18(s32 a0);
+extern void func_80147B5C(s32 arg0, void *arg1);
+extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147DC0(s32 a0, s32 a1);
+extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4);
+extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147F50(s32 arg0);
+extern volatile s32 D_80127090;
+extern volatile s32 D_80127094;
+extern volatile s32 D_80127098;
+extern void func_80147F78(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80148038(s32 a0, s32 a1);
+extern s32 csqrt(s32 a0);
+extern s32 func_80012A60(s32 a0, s32 a1);
+extern void func_80148094(int param_1, short *param_2, int *param_3);
+extern void func_80015978(int a0, int *a1);
+extern int func_80133784(int a0, void *a1, int a2);
+extern void func_801483E8(unsigned char *self);
+extern void func_801485B8(s32 a0, s32 a1, s32 a2);
+extern void func_801484B0(s32 a0, s32 a1);
+extern s32 func_80154358(void *a0);
+extern void func_801484E8(s32 a0, s32 a1);
+extern void func_80148534(s32 a0, s32 a1);
+extern void func_8014856C(s32 a0, s32 a1);
+extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2);
+extern void func_80148634(void *a0);
+extern s32 func_80014DC0();
+extern s32 func_80014D68();
+extern s32 func_80014D94();
+extern s32 func_80014CF8();
+extern void func_800120DC();
+extern s32 func_800CF8B4();
+extern u16 func_801487F4(s32 *a0);
+extern u16 func_80148800(s32 *a0);
+extern u8 func_8014880C(s32 *a0);
+extern u16 func_80148818(s32 *a0);
+extern s32 func_80148824(void *arg0);
+extern s32 func_801488A8(u8 *a0);
+extern s32 func_8014891C(s32 a0);
+extern s32 func_80148980(u8 *a0);
+extern s32 func_801489E8(s32 a0);
+extern s32 func_80148A48(s32 a0);
+extern int func_80148AFC(void *a0);
+extern void func_80148AAC(u8 *a0);
+extern s32 func_80148C18(void);
+extern s32 func_80148C20(s32 a0, s16 a1);
+extern s32 func_80148C34(s32 a0, s32 a1);
+extern s32 func_80148C4C(s32 a0, s32 a1);
+extern s32 func_80148C64(s32 a0, s32 a1);
+extern s32 func_80148C7C(void);
+extern s32 func_80148C84(s32 a0, s32 a1);
+extern s32 func_80148C9C(s32 a0, s32 a1);
+extern s32 func_80148CB4(s32 a0, s32 a1);
+extern s32 func_80148CCC(s32 a0, s32 a1);
+extern s32 func_80148CE4(void);
+extern s32 func_80148CEC(void);
+extern s32 func_80148CF4(s32 a0, s32 a1);
+extern s32 func_80148D0C(s32 a0, s32 a1);
+extern s32 func_80148D24(void *a0, int a1);
+extern s32 func_80148D3C(void);
+extern s32 func_80148D44(void);
+extern s32 func_80148F60(void);
+extern s32 func_80148F68(s32 a0);
+extern s32 func_80148F74(s32 a0);
+extern s32 func_80148F80(s32 a0);
+extern s32 func_80148F8C(s32 a0);
+extern s32 func_80148F98(void);
+extern s32 func_80148FA0(s32 a0);
+extern s32 func_80148FAC(s32 a0);
+extern s32 func_80148FB8(s32 a0);
+extern s32 func_80148FC4(s32 a0);
+extern s32 func_80148FD0(void);
+extern s32 func_80148FD8(void);
+extern s32 func_80148FE0(s32 a0);
+extern s32 func_80148FEC(s32 a0);
+extern s32 func_80148FF8(s32 a0);
+extern s32 func_80149004(void);
+extern void func_8014900C(s32 *a0);
+extern void func_80149020(s32 *a0);
+extern void func_80149034(s32 *a0);
+extern void func_80149048(s32 *a0);
+extern void func_8014905C(u8 *a0);
+extern void func_801490E0(s32 *a0, s16 a1);
+extern void func_801490E8(s32 *a0, s16 a1);
+extern void func_801490F0(s32 *a0, s16 a1);
+extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_80012B04(s32 a0, s32 a1, s32 a2);
+extern void func_801490F8(s32 a0, s32 a1);
+extern s32 func_801491C4(s32 a0);
+extern s32 func_80149184(s32 a0);
+extern void func_80149204(s32 *a0);
+extern void func_80149210(s32 a0, s32 a1);
+extern s32 func_80149284(s32 *a0, s32 a1);
+extern void func_80149350(s32 arg0);
+extern void func_80149290(s32 a0);
+extern void func_80149374(s32 arg0, s32 arg1);
+extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3);
+extern void func_8014942C(s32 arg0);
+extern void func_80149450(s32 a0, s16 *a1);
+extern void func_801494CC(s32 a0, u16 *a1, u16 *a2);
+extern void func_80149544(s32 a0, s32 a1, s32 a2);
+extern void func_80149584(s32 a0, s32 a1, s32 a2);
+extern void func_8014964C(s32 param_1, s32 param_2);
+extern void func_8012EF70(s32, s32);
+extern void func_801495C4(s32 a0, s32 a1);
+extern s32 func_801496D4(void *a0);
+extern void func_8015AD08();
+extern void func_80149704(void);
+extern void func_8015ACC4();
+extern void func_80149724(void);
+extern u8 D_80078EBF;
+extern s32 func_80149744(struct S_80149744 *a0);
+extern void func_8015F7A0();
+extern void func_80149788(void);
+extern u8 D_80078E78[];
+extern u8 D_80078EC1;
+extern s32 func_8014CB7C(void);
+extern s32 func_8014C088(s32 a0, s32 a1);
+extern u8 func_80165658(s32 a0, s32 a1);
+extern s32 func_801497A8(s32 *a0);
+extern void func_801653B8();
+extern void func_80149864(void);
+extern s32 func_8016F1AC(void);
+extern s32 func_80149884(void);
+extern void func_80160B00();
+extern void func_801498C0(void);
+extern s32 func_80149AA8(s32 *a0);
+extern s32 func_80149B54(s32 *a0);
+extern s32 func_801498E0(s32 *a0);
+extern s32 func_800CCF28(s32 a0);
+extern s32 func_80149954(s32 s0);
+extern s32 func_80149A64(s32 *a0);
+extern void func_8015DAC4(s32 *a0);
+extern void func_8015554C(s32 *a0);
+extern void func_80149AD4(s32 *a0);
+extern void func_80149B14(s32 *a0);
+extern u8 func_8014BEF8(void);
+extern s32 func_80149B54(s32 * arg0);
+extern void func_8015DE24(s32 *a0);
+extern void func_80157510(s32 *a0);
+extern void func_80149BAC(s32 *a0);
+extern s32 func_80029178(s32 a0);
+extern s32 func_80149C08(s32 arg0);
+extern void func_801577C8();
+extern void func_80149C94(void);
+extern void func_80157D20(void);
+extern void func_80149CB4(void);
+extern s32 func_80149CD4(s32 a0);
+extern u8 func_8014B5B8(s32 *a0);
+extern s32 func_80149D10(s32 a0);
+extern s32 func_80149E94(s32 a0);
+extern s32 func_80149DD8(s32 a0);
+extern s32 func_80149D9C(s32 a0);
+extern s32 func_80149F2C(s32 a0, s32 a1);
+extern s32 func_80149E94(s32 arg0);
+extern void func_801599A4(void *a0);
+extern void func_80159B3C(void *a0);
+extern void func_8016EDEC(s32, s32, s32);
+extern void func_80149FA8(void);
+extern s32 func_80149FB0(s32 a0);
+extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3);
+extern void func_8014A1B0(s32 a0, s32 a1);
+extern s32 func_8014A048(s32 param_1);
+extern u16 func_80156370(u16 a0);
+extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4);
+extern void func_8015D4B4();
+extern void func_8014A218(void);
+extern s32 func_8014C278(s32 a0, s32 a1, s32 a2);
+extern s32 func_8014C2B0(void *a0, void *a1, s32 a2);
+extern s32 func_8014A238(s32 arg0);
+extern s32 func_8014A2E4(s32 a0);
+extern void func_8014A380(s32 a0, s32 a1);
+extern s16 D_801152B0;
+extern s16 D_801152B4;
+extern s32 func_8014A3E0(struct S_8014A3E0 *a0);
+extern s32 func_8014A454(s32 a0);
+extern s32 func_8014A4B4(void *a0);
+extern void func_8015EDD4();
+extern void func_8014A4FC(void);
+extern int func_8014A51C(int param_1);
+extern s32 func_8014A674(s32 *a0);
+extern s32 func_8014A69C(s32 *a0);
+extern s32 func_8014A6C4(s32 a0);
+extern s32 func_8014A738(void *arg0);
+extern void func_8015E184();
+extern void func_8014A830(void);
+extern s32 func_80029AF4(void);
+extern s32 func_8014A850(s32 param_1);
+extern s32 func_80165A20(s32 a0);
+extern void func_8014AB7C();
+extern void func_8014AC10();
+extern void func_8014AA28(void);
+extern void func_8014AB5C(void);
+extern void func_80162CCC(void);
+extern void func_8014AB7C(s32 arg0);
+extern void func_8014ABF0(void);
+extern void func_8014AC10(s32 arg0);
+extern void func_8014ACC0(s32 a0, s32 a1);
+extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3);
+extern void func_8014ACE8(void *a0, s32 a1, s32 a2);
+extern void func_80146AFC(void *a0);
+extern void func_8014ADA8(s32 a0, s32 a1);
+extern void func_8014AD7C(s32 a0);
+extern s32 D_80078E8C;
+extern s32 func_8016F1C4(void);
+extern s32 func_8014B154(s32 *a0);
+extern void func_8014BD24(s32 a0, s32 a1);
+extern void func_8014BB24(s32 a0, s32 a1, s32 a2);
+extern void func_8014BC80(s32 a0, s32 a1);
+extern void func_8014BD60(s32 a0, s32 a1);
+extern void func_8014B084(void);
+extern void func_8014B034(s32 arg0);
+extern void func_8014B00C(s32 arg0);
+extern s16 D_80078E90;
+extern void func_8014B034(s32 a0);
+extern u16 D_80078EAC;
+extern u8 D_80078EBA;
+extern void func_800D10EC(void);
+extern void func_8002AC98(void);
+extern void func_8014B12C(void);
+extern void func_8014B2F8(void);
+extern void func_8014B4C4(void);
+extern void func_8014B160(s32 a0);
+extern s16 D_80078E96;
+extern s16 D_80078EB8;
+extern u16 D_80078EA6;
+extern void func_8014B2A8(void);
+extern void func_8014B310(void);
+extern void func_8014B2D0(void);
+extern s32 D_80078E94;
+extern s32 D_80078ECC;
+extern void func_8014B33C(void);
+extern u8 D_80062BF4[];
+extern s32 D_80078E98;
+extern void func_8014B4D4(void *a0);
+extern s16 D_80078E9A;
+extern u8 D_80126D1C;
+extern s32 D_80126D74;
+extern void func_8014B598(s32 a0, s32 a1);
+extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2);
+extern void func_8014B5D8(s32 s1);
+extern s32 D_80078E9C;
+extern s32 D_80078ED0;
+extern void func_8014B6F0(s32 a0, s32 a1);
+extern void func_8014B768(s32 a0, s32 a1);
+extern void func_8014B944(s32 a0, s32 a1, s32 a2);
+extern s32 D_80078EA4;
+extern u16 D_80078EB2;
+extern s16 D_80078EB4;
+extern void func_8014BB0C(void);
+extern void func_8014BC0C(s32 a0, s32 a1);
+extern void func_8014BC44(s32 a0, s32 a1);
+extern void func_8014BCC0(s32 a0, s32 a1);
+extern u16 D_80078EB6;
+extern s32 func_8014BCEC(s32 a0, s32 a1);
+extern void func_8014BD60(s32 param_1, s32 param_2);
+extern void func_8014BD98(s32 a0, u16 a1);
+extern void func_8014BDC8(void);
+extern void func_8014BDE0(void);
+extern s32 func_8017267C(s32 *a0);
+extern void func_80029ED4(s32 a0);
+extern void func_8014BE78(void);
+extern void func_8014BE9C(void);
+extern void func_80029124(s32 a0, s32 a1);
+extern void func_8014BEC0(void);
+extern void func_8014BF18(s32 a0);
+extern void func_8014BF48(void);
+extern u8 func_8014BF6C(void);
+extern void func_8014BF8C(u8 arg0);
+extern void func_8014BFB0(void);
+extern u8 func_8014BFD4(void);
+extern void func_8014BFF4(s32 a0, s32 a1);
+extern void func_8014C010(s32 a0, s32 a1);
+extern s32 func_8014C050(s32 a0, s32 a1);
+extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2);
+extern s32 func_8014C118(void * a0, s32 a1, s32 a2);
+extern s32 func_8014C168(s32 * param_1, s32 param_2);
+extern void func_8014C1C8(s32 a0, s32 a1, void* a2);
+extern s32 func_80013328(s32 a0, s32 a1);
+extern s32 func_8014C59C(void *a0, void *a1);
+extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5);
+extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4);
+extern s32 aF8014C4AC();
+extern s32 func_8014C568(s16 *a0, s16 *a1);
+extern s32 ratan2(s32 dx, s32 dy);
+extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2);
+extern s16 func_8014C5D0(s32 a0, s32 a1);
+extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2);
+extern u8 D_80126D17;
+extern void func_8014C6AC(void);
+extern void func_8014C6C0(void);
+extern u8 D_80126D1E;
+extern void func_8014C6D0(void);
+extern void func_8014C6E0(void);
+extern void func_8014C6F4(u8 *a);
+extern s32 func_8014C860(s32 a0, s32 a1);
+extern void func_8014C8C8(s32 a0, s32 *a1);
+extern void func_8014C88C(s32 a0);
+extern void func_8014C8C8(s32 dst, s32 * src);
+extern void func_8014C8F0(s32 arg0);
+extern u8 D_801151F0[];
+extern s32 func_8014C918(s32 a0, s32 a1);
+extern s32 D_80126B50;
+extern void func_8014C968(void);
+extern s32 func_8014C98C(void);
+extern void func_80139914(s32 a0);
+extern s32 func_8014CA00(s32 a0);
+extern u16 func_8014CA70(s32 a0, s32 a1);
+extern s32 func_8014CA14(s32 a0, s32 a1);
+extern u16 func_8014CAE4(s32 *a0, s32 a1);
+extern s32 func_8014CA88(s32 *a0, s32 a1);
+extern s32 D_80126B9C;
+extern s32 func_8014CAFC(void);
+extern s32 func_8014CB0C(void);
+extern s32 func_8014CB1C(void);
+extern u8 D_80126D1F;
+extern s32 func_8014CB2C(void);
+extern s32 func_8014CB58(void);
+extern u8 D_80126D1D;
+extern void func_8014CB68(void);
+extern s32 func_8014CB8C(void);
+extern struct Packed8 D_80126C98;
+extern short D_80126C9E;
+extern void func_8014CB9C(struct Packed8 *a0);
+extern s32 D_80126CDC;
+extern void func_8014CBD8(void);
+extern void func_8014CBF8(void *a0);
+extern void func_8014D3E0(s32 a0);
+extern void func_8014D04C(void);
+extern void func_8014CCB4(void);
+extern void func_8014CC28(s32 a0);
+extern void func_8014CD0C(u8 *a0);
+extern s32 func_8014CF04(s32 a0, s32 a1, void *a2);
+extern int func_8014CD80(s32 a0, u16 *a1, u16 *a2);
+extern int func_80135A4C();
+extern int func_80135888();
+extern int func_8014C918();
+extern int func_8014CD80(int param_1, unsigned short *param_2, unsigned short *param_3);
+extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2);
+extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3);
+extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3);
+extern void func_8014D0A4(s32);
+extern s32 func_8014D2A0(s32 a0, void *a1, void *a2);
+extern s32 func_8014D12C();
+extern void func_8014D0A4(s32 a0);
+extern s32 func_8014D12C(s32 arg0, void *a1, void *a2);
+extern s32 func_8014D2A0(s32 arg0, void *a1, void *a2);
+extern s32 func_8014D610(s32 a0, s32 a1, u16 *a2);
+extern s32 func_8014D4C0(s32 a0, void *a1, void *a2);
+extern void func_8014D438(s32 a0);
+extern s32 func_8014D610(s32 param_1, s32 param_2, u16 *param_3);
+extern void func_8014D790(s32);
+extern void func_8014D738(void);
+extern s32 func_8014DD8C(s32 a0, void *a1, void *a2);
+extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2);
+extern void func_8014D790(s32 a0);
+extern void func_800139C8(s32 a0, void *a1, void *a2);
+extern s32 func_8014DCE0(s32 a0, s32 a1, s32 a2);
+extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2x);
+extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2);
+extern void func_8014DF94(s32);
+extern void func_8014DF3C(void);
+extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */
+extern void func_8014DF94(s32 arg0);
+extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */
+extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3);
+extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); /* canonical (engine_core.h:11555) */
+extern s32 func_8014E284(s32 a0, s16 *arg1, s16 *arg2);
+extern void func_8014E48C(s32);
+extern void func_8014E434(void);
+extern void func_8014E5B4(s32 a0, void *a1, void *a2);
+extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2);
+extern void func_8014E48C(s32 a0);
+extern s32 aF8014E5B4();
+extern void func_8014E6F8(struct SubE6F8*);
+extern void func_8014E6A0(void);
+extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2);
+extern void func_8014E6F8(struct SubE6F8 *a0);
+extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3);
+extern s32 func_8014E98C(void *a0);
+extern u16 D_800B99DA;
+extern s32 D_801150D8;
+extern s16 D_80126724;
+extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014ED80(struct SubED80 *a0);
+extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014F24C(struct SubF24C*);
+extern void func_8014F1F4(void);
+extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014F24C(struct SubF24C *a0);
+extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014F468(void);
+extern int func_8014F6F4(void);
+extern s32 func_8014F3E8(s32 param_1);
+extern int func_8014F74C();
+extern s32 D_801152BC;
+extern s32 func_8014F4C0(s32 arg0);
+extern int func_8014F74C(s32 arg0);
+extern s32 func_8014FA70(s32 a0);
+extern void func_8014FA04(s32 a0);
+extern s32 func_8014FC18(u8*);
+extern void func_8014FBC0(void);
+extern s32 func_8014FC18(u8 *self);
+extern int func_8014FD54(int);
+extern void func_8014FCFC(void);
+extern int func_8014FD54(int param_1);
+extern s32 func_80150170(void *a0);
+extern s32 func_8014FE60();
+extern s32 func_8014FE60(void *e);
+extern s32 func_80135D20(s32 a0, s32 a1, void *a2);
+extern s32 func_8014FFDC(s32 e, void *a1, void *a2);
+extern s32 func_80150150(s32 a, s32 b);
+extern s32 func_801502EC(s32 e, void *a1, void *a2);
+extern s32 func_80150460(s32 e, s32 a1);
+extern s32 func_80150170(void *e);
+extern s32 func_80150460(s32 a, s32 b);
+extern s32 func_80150528(void *a0, void *a1, void *a2);
+extern void func_801504D8(u16 *a0);
+extern s32 func_80150528(void *arg0, void *arg1, void *arg2);
+extern s32 func_801506A4();
+extern void func_80147324(s32 a0);
+extern s32 func_801506A4(s32 arg0, s32 arg1);
+extern void func_80150820(s32 a0, s32 a1);
+extern void func_8015086C(int param_1);
+extern s32 func_801508B4(s32 a0);
+extern s32 func_8015094C(s32 a0);
+extern s32 func_80021174(s32 a0, s32 a1);
+extern s32 func_8015094C(s32 param_1);
+extern void func_80150B28(int param_1);
+extern void func_80150B9C(void);
+extern s32 func_80151184(s32 a0, s32 a1, s32 a2);
+extern s32 func_80150BA4(s32 a0);
+extern s32 func_801619D0(void *a0);
+extern void func_80150BC8(s32 *a0);
+extern s32 func_80150480(s32 a0);
+extern u16 D_800AE6DC;
+extern void func_80150C48(s32 a0);
+extern int func_80151184(int arg, int a1, int a2);
+extern int func_80150CA0(int arg);
+extern void func_80150EC4(s32 a, s32 b);
+extern void func_80150CC4(s32 a);
+extern void func_80150CE4(s32 a);
+extern void func_80150D04(s32 a);
+extern void func_80150D24(s32 a);
+extern void func_80150D44(s32 a);
+extern void func_80150D64(s32 a);
+extern void func_80150D84(s32 a);
+extern void func_80150DA4(s32 a);
+extern void func_80150DC4(s32 a);
+extern void func_80150DE4(s32 a);
+extern void func_80150E04(s32 a);
+extern void func_80150E24(s32 a);
+extern void func_80150E44(s32 a);
+extern void func_80150EC4(s32 a0, s32 a1);
+extern void func_80150E64(s32 a0);
+extern void func_80150E84(s32 a0);
+extern void func_80150EA4(s32 a0);
+extern u8 D_800AE6C0;
+extern s16 D_800AE6C8;
+extern s16 D_800AE6CA;
+extern s16 D_800AE6CC;
+extern s32 D_800AE6C4;
+extern s16 D_800AE6CE;
+extern u8 D_800AE6BE;
+extern u8 D_801201F8[];
+extern void func_80150F78(void);
+extern void func_80150F80(s32 a0);
+extern int func_80150FB4(int arg);
+extern void func_80150FD8(s32 a0);
+extern int func_80151014(int arg);
+extern void func_80151038(s32 a0);
+extern int func_80151070(int arg);
+extern int func_80151094(int arg);
+extern void func_801510B8(void);
+extern void func_801510C0(void);
+extern int func_801510C8(int arg);
+extern int func_801510EC(int arg);
+extern s32 func_80151110(void);
+extern void func_80151130(void);
+extern int func_80151138(int arg);
+extern void func_8015115C(s32 *a0, s16 a1);
+extern s32 func_80151164(s32 a0, s32 a1);
+extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2);
+extern void func_801511A8(u8 *a0);
+extern void func_801511C4(u8 *a0);
+extern int func_80151204(int arg, int a1);
+extern int func_801511E0(int arg);
+extern int func_80151204(int a0, int a1);
+extern void func_80151238(void *a0);
+extern void func_8015126C(u16 *p);
+extern void func_80151664(void);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553C0(s32 a0);
+extern void func_80153C18(); /* fleet canon: K&R empty prototype (engine_core.h:75, :1682 defines it (void));
+extern * a prototyped (s32) decl is `conflicting types` in this TU. Arg still * passes in $a0 under default promotions -> codegen unchanged. */ void func_80151664(void);
+extern void func_80151780(s32 a0);
+extern void func_801516F0(s32 *a0);
+extern void func_8015173C(s32 *a0);
+extern s16 D_8011DB1A;
+extern s32 D_80127518;
+extern s32 D_801151FC;
+extern s32 func_801725CC(u8 *a0);
+extern s32 func_80029D3C(void);
+extern void func_80151878(void);
+extern void func_80153B58(s32 *a0);
+extern s32 func_80151880(s32 a0);
+extern s32 func_801518D8(s32 a0);
+extern void func_80151944(void *a0);
+extern s32 func_80151924(void);
+extern void func_8014E934(s32 a0);
+extern s32 func_8014F3E8(s32 a0);
+extern void func_801519C8(s32 a0);
+extern void func_80151980(s32 a0);
+extern M2C_UNK D_800D5880;
+extern s32 D_800D58AC;
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_801519C8(s32 arg0);
+extern void func_80151C54(s32 a0);
+extern void func_801542DC(s32 *a0, s32 a1);
+extern void func_8015BDD0(s32 *a0);
+extern void func_80165718(s32 a0);
+extern u8 D_800D46E4[];
+extern void func_80151AE4(s32 arg0);
+extern s32 func_801535F4(void *arg0);
+extern void func_8015BF48(s32 *a0);
+extern void func_80151B98(int param_1);
+extern void func_80153C18();
+extern void func_80151D24(void *a0);
+extern void func_80151DB0(s32 a0);
+extern void func_80151D60(void *a0);
+extern s32 func_80172630(u8 *a0);
+extern s32 D_80062C14;
+extern void func_80151DB0(s32 param_1);
+extern void func_80151E78(s32 *a0);
+extern void func_80151ECC(struct S80151ECC *a0);
+extern void func_80151FB4(s32 a0);
+extern void func_80151F38(s32 *a0);
+extern void func_80152058(void *a0);
+extern void func_801520DC(s32 a0);
+extern void func_80152094(s32 a0);
+extern void func_801520DC(s32 arg0);
+extern void func_801470B4(s32 a0);
+extern void func_8015369C(s32 a0);
+extern void func_80152194(s32 *a0);
+extern s32 func_801536DC(s32 a0);
+extern void func_8015220C(s32 a0);
+extern s32 func_80153800(s32 a0);
+extern void func_801522CC(s32 a0);
+extern void func_80152254(s32 *a0);
+extern void func_80152370(void *a0);
+extern void func_801523F4(s32 a0);
+extern void func_801523AC(s32 a0);
+extern void func_8001382C(s32 a0, void *a1, void *a2);
+extern void func_801523F4(s32 arg0);
+extern void func_801525F4(int);
+extern void func_80152500(int param_1);
+extern void func_801525F4(s32 a0);
+extern void func_80152698(void *a0);
+extern void func_80152714(s32 a0);
+extern void func_801526D4(s32 a0);
+extern void func_80152790(s32 a0);
+extern void func_8015282C(void *a0);
+extern void func_801528B0(s32 a0);
+extern void func_80152868(s32 a0);
+extern void func_801528B0(s32 arg0);
+extern void func_8015294C(s32 a0);
+extern void func_80152A08(s32 a0);
+extern void func_80152AC8(s32 a0);
+extern void func_80152A50(s32 *a0);
+extern void func_80152B6C(void *a0);
+extern void func_80152BF0(s32 a0);
+extern void func_80152BA8(s32 a0);
+extern void func_80152C80(s32 *a0);
+extern void func_80152C40(s32 *a0);
+extern void func_80152C80(s32* a0);
+extern void func_80152D24(void *a0);
+extern void func_80152DA8(s32 a0);
+extern void func_80152D60(s32 a0);
+extern void func_80152DA8(s32 arg0);
+extern void func_80152E4C(s32 a0);
+extern void func_80152EFC(s32 a0);
+extern void func_80152FBC(s32 a0);
+extern void func_80152F44(s32 *a0);
+extern void func_80153060(void *a0);
+extern void func_801530E4(s32 a0);
+extern void func_8015309C(s32 a0);
+extern void func_80155440(s32 *a0);
+extern u8 D_80062C04[];
+extern void func_801530E4(s32 arg0);
+extern void func_80153150(struct S80153150 *a0);
+extern void func_801531BC(s32 a0);
+extern void func_8015327C(s32 a0);
+extern void func_80153204(s32 *a0);
+extern void func_80153320(void *a0);
+extern void func_801533A4(s32 a0);
+extern void func_8015335C(s32 a0);
+extern void func_80153410(s32 *a0);
+extern void func_80153490(s32 a0);
+extern void func_80153550(s32 a0);
+extern void func_801534D8(s32 *a0);
+extern void func_8014ED28(s32 a0);
+extern void (*D_8011DB28)(s32 a0);
+extern s32 func_801536DC(s32 param_1);
+extern s32 func_80153978(s32 a0, u16 *src);
+extern s32 func_80133784(s32 a0, void *src, s32 dst);
+extern s32 func_801539F8(s32 a0, void *a1);
+extern s32 func_801539F8(s32 a0, void * a1);
+extern s32 func_8016DA04(s32 a0);
+extern s32 func_80153BD8(s32 a0);
+extern s32 func_80153BF0(s32 a0);
+extern void func_80153C18(void);
+extern u16 D_8011F748;
+extern void func_80153C30(void);
+extern void func_80153C74(s16 a0, s16 a1);
+extern s16 D_8011DB18;
+extern void func_80153C44(int a0, int a1, s16 a2);
+extern s16 D_8011DB0C;
+extern s32 D_80115210;
+extern void func_80153C8C(void);
+extern void func_80153C9C(void);
+extern s32 func_80153CBC(void);
+extern void func_80153CCC(S80153CCC *a0);
+extern void func_80153D7C(s32 a0);
+extern void func_80153D34(s32 a0);
+extern void func_80153D7C(s32 param_1);
+extern void func_8015410C(void);
+extern void func_80153E00(s32 param_1);
+extern void func_80154134(u8 *a0);
+extern void func_80154190(u8 *a0, s32 a1);
+extern void func_80154150(s32 a0, s32 a1);
+extern void func_80154218(u8 *a0, s32 a1, s32 a2);
+extern void func_801541D8(u8 *a0, s32 a1, s32 a2);
+extern s32 func_801549F8(s32 a0, s32 a1, s32 a2);
+extern void func_801542A4();
+extern void func_801542A4(s32 *a0, s32 a1);
+extern void func_8015430C();
+extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2);
+extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3);
+extern s32 func_80154358(void * arg0);
+extern void func_80154AB4(s32 a0, s32 a1);
+extern void func_80154B20(s32 a0, s32 a1, s32 a2);
+extern void func_80154AE0(s32 a0, s32 a1, s32 a2);
+extern void func_80154B7C(u8 *a0, s32 a1);
+extern void func_80154B4C(u8 *a0, s32 a1);
+extern void func_80154BC8(void *a0, s32 a1, s32 a2);
+extern void func_80154B98(void *a0, s32 a1, s32 a2);
+extern u8 D_800D8D10[];
+extern s16 D_80078E9E;
+extern void func_801550FC(s32 a0);
+extern void func_80154ED8(s32 a0, s32 a1);
+extern void func_80154F9C(s32 a0);
+extern void func_801550FC(s32 arg0);
+extern void func_8001D150(s32, s32);
+extern void func_8001D130(int, int);
+extern void func_80155150(int param_1);
+extern s32 D_800DE2A4[];
+extern void func_801552F4(s32 a0);
+extern void func_80155344(s32 a0);
+extern s32 func_80155394(s32 *a0);
+extern void func_801553A8(s32 *a0);
+extern s32 func_80155458(s32 param_1);
+extern s32 func_801659DC(u8 *a0);
+extern s32 func_801554B8(void *arg0);
+extern void func_801555F4(void *a0);
+extern void func_80155518(s32 *a0);
+extern void func_80155580(void *a0);
+extern s32 func_80161104(void);
+extern void func_801555F4(void *);
+extern void func_801555BC(void *a0);
+/* ==== end §8b carried decl layer ==== */
+
+
+extern s32 D_8011F730;
+extern s32 func_80029178(s32 arg);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146CA0(void *a0);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern void func_80147300(u16 arg0);
+extern void func_80147324(s32 a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553A8(s32 *a0);
+
+
+
+void func_801555F4(void *param_1)
+{
+ extern void func_80156648(int *a0);
+ extern int D_800D4C94;
+ extern int D_800D4CE4;
+ extern int D_800D4D38;
+ extern int D_800D4D88;
+ extern int D_800D4E10;
+ extern int D_800D4E6C;
+
+
+ int uVar1;
+ unsigned char bVar3;
+ int s1;
+ unsigned short uVar4;
+
+ ((void(*)(int, int))func_80154A74)(((int)param_1), 0x15);
+ if ((*(unsigned int *)(((int)param_1) + 0x44) & 0x200) == 0) {
+ if (*(int *)(((int)param_1) + 0x2c) == -0xb0000) {
+ uVar1 = ((int(*)(int))func_80029178)(0x82);
+ if ((uVar1 & 0xff) != 0) {
+ uVar1 = 7;
+ goto L_648;
+ }
+ }
+ } else {
+ uVar1 = 5;
+L_648:
+ *(unsigned char *)(((int)param_1) + 0x1aa) = uVar1;
+ }
+ switch (*(unsigned char *)(((int)param_1) + 0x1aa)) {
+ case 0:
+ case 1:
+ bVar3 = *(unsigned char *)(((int)param_1) + 0x1ab) ^ 1;
+ *(unsigned char *)(((int)param_1) + 0x1ab) = bVar3;
+ if (bVar3 != 0)
+ *(unsigned char *)(((int)param_1) + 0x1aa) = 0;
+ else
+ *(unsigned char *)(((int)param_1) + 0x1aa) = 1;
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4C94);
+ ((void(*)(int))func_80147324)(0x400);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 0;
+ D_8011F730 |= 3;
+ func_80146CA0((void *)((int)param_1));
+ goto L_7b8;
+ case 2:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4CE4);
+ ((void(*)(int))func_80147324)(0x446);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 1;
+ goto L_575c;
+ case 3:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4D38);
+ ((void(*)(int))func_80147324)(0x400);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 2;
+ goto L_575c;
+ case 4:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4D88);
+ ((void(*)(unsigned short))func_80147300)(0x5f6);
+ s1 = 3;
+ func_80146CA0((void *)((int)param_1));
+L_575c:
+ func_80146CA0((void *)((int)param_1));
+ goto L_7b8;
+ case 5:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4E10);
+ s1 = 4;
+ uVar4 = 7;
+ goto L_7b0;
+ case 7:
+ ((void(*)(int))func_80147324)(0x7f);
+ ((void(*)(unsigned short))func_80147300)(0x5f4);
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4E6C);
+ s1 = 6;
+ uVar4 = 8;
+L_7b0:
+ *(unsigned short *)(((int)param_1) + 2) = uVar4;
+ goto L_7b8;
+ default:
+ ;
+ }
+L_7b8:
+ ((void(*)(int *, int))func_80146E90)((int *)((int)param_1), 0);
+ func_80156648((int *)((int)param_1));
+ if (s1 >= 0) {
+ ((int(*)(int, int, int, int))func_80146994)(4, ((int)param_1), s1, 0);
+ }
+ ((void(*)(int *))func_801553A8)((int *)((int)param_1));
+}
+
+DEFINE_func_80155800() /* dedup: shared engine-core @0x80155800 (src/shared) */
+
+
+DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155a44 (src/shared) */
+
+
+DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155b20 (src/shared) */
+
+
+DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155b9c (src/shared) */
+
+
+DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155c0c (src/shared) */
+
+
+DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155c64 (src/shared) */
+
+
+DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155d70 (src/shared) */
+
+
+DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155e30 (src/shared) */
+
+
+DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155ea4 (src/shared) */
+
+
+void func_80155F58(void) {
+}
+
+DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155f60 (src/shared) */
+
+
+DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155f80 (src/shared) */
+
+
+DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155fb0 (src/shared) */
+
+
+DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155fd4 (src/shared) */
+
+
+DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155ff8 (src/shared) */
+
+
+
+void func_80156044(int param_1, int param_2)
+{
+ extern u32 func_8015616C(s32 a0, u16 a1);
+ extern void func_80156670(s32, s32, s32, s32, s32, u16);
+ extern void func_801567BC(s32 a0);
+ extern void func_80156848(s32, s32);
+ extern void func_80156A88(s32 a0, s32 a1);
+ extern s32 func_801565C0(void);
+ extern u8 D_801803A8;
+ extern u8 D_801803BC;
+ extern u8 D_80180240;
+
+ register s32 puVar2 __asm__("$2");
+ register s32 iVar3 __asm__("$3");
+ u8 *puVar4;
+ s32 uVar1;
+
+ if (((u32)param_2) & 0x10000) {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_801803A8;
+ } else if (((u32)param_2) & 0x20000) {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_801803BC;
+ } else {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_80180240;
+ }
+ puVar4 = (u8 *)(iVar3 + puVar2);
+ uVar1 = func_8015616C(((s32)param_1), *(u16 *)puVar4) & 0xffff;
+ if (*(u8 *)(((s32)param_1) + 0x1a8) != 0) {
+ ((void (*)(s32, s32, s32, s32, s32, s32))func_80156670)(((s32)param_1), *(s32 *)puVar4, uVar1, *(s32 *)(puVar4 + 4),
+ *(u8 *)(puVar4 + 0xA), *(u16 *)(puVar4 + 0x12));
+ if (*(u8 *)(puVar4 + 0x10) != 0) {
+ func_801567BC(((s32)param_1));
+ }
+ ((void (*)(s32, s32, s32))func_80156848)(((s32)param_1), (s32)puVar4, uVar1);
+ func_80156A88(((s32)param_1), (s32)puVar4);
+ if (((s32 (*)(s32))func_801565C0)(((s32)param_1)) != 0) {
+ *(u8 *)(((s32)param_1) + 0x1c0) = 1;
+ }
+ }
+}
+
+
+DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616c (src/shared) */
+
+
+DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */
+
+
+
+
+S801563EC *func_801563EC(u16 idx) {
+
+ extern S801563EC D_801803E4[];
+ return &D_801803E4[idx];
+}
+
+
+DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640c (src/shared) */
+
+
+DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564b0 (src/shared) */
+
+
+DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565c0 (src/shared) */
+
+
+DEFINE_func_80156600() /* dedup: shared engine-core @0x80156600 (src/shared) */
+
+DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */
+
+
+
+DEFINE_func_80156670() /* dedup: shared engine-core @0x80156670 (src/shared) */
+
+
+DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567bc (src/shared) */
+
+
+DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */
+
+
+DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156a14 (src/shared) */
+
+
+
+// @class: struct
+// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180654 indexed halfword folds %lo
+extern void func_80147324(s32 arg0);
+
+void func_80156A1C(s32 param_1, s32 param_2)
+{
+
+ extern unsigned char D_8011520C[];
+ extern unsigned short D_80180654[];
+ if (*(unsigned char *)(param_1 + 0xDA) == 0) {
+ func_80147324(D_80180654[D_8011520C[param_2]]);
+ *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1;
+ }
+}
+
+
+DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156a88 (src/shared) */
+
+
+DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156b74 (src/shared) */
+
+
+DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ecc (src/shared) */
+
+
+DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156fa8 (src/shared) */
+
+
+DEFINE_func_80157158() /* dedup: shared engine-core @0x80157158 (src/shared) */
+
+
+DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571c4 (src/shared) */
+
+
+DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574dc (src/shared) */
+
+
+DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */
+
+
+
+
+void func_80157544(void *a0) {
+
+ extern void (*D_80180664[])(void);
+ D_80180664[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */
+
+
+DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575e4 (src/shared) */
+
+
+DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576a8 (src/shared) */
+
+
+DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771c (src/shared) */
+
+
+DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773c (src/shared) */
+
+
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_801578C0(s32 a0);
+
+void func_80157788(s32 *a0)
+{
+ /* [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_80184280;
+ D_80184280 = 0x12C;
+ func_80147078(a0, 7);
+ func_801578C0((s32)a0);
+}
+
+
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80157808(s32 *a0);
+
+void func_801577C8(s32 *a0)
+{
+ /* [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_80184280;
+ D_80184280 = 0x12C;
+ func_80147078(a0, 7);
+ func_80157808(a0);
+}
+
+
+INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801555F4", func_80157808);
+
+DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274
+
+extern void func_80156648(s32 *a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_80147324(s32 arg0);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146CA0(void *a0);
+extern s32 func_801725A4(u8 *a0);
+
+void func_801578C0(s32 param_1)
+{
+
+ extern u8 D_800D5128;
+ extern u8 D_8018066C;
+ ((void (*)(void))func_80156648)();
+ *(u8 *)(param_1 + 0x1AA) = 9;
+ func_80154274((s32 *)param_1, (s32)&D_800D5128);
+ ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15);
+ func_80147324(0xC20);
+ ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018066C);
+ ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0);
+ ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0);
+ ((void (*)(s32 *))func_80146CA0)((s32 *)param_1);
+ ((void (*)(s32 *))func_801725A4)((s32 *)param_1);
+}
+
+
+
+// @class: other
+// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only
+// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves
+// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT
+// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16
+// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH.
+
+extern void func_80147A10(int a0, int a1);
+extern void func_80147A84(int);
+extern void func_801473EC(s32 *a0);
+extern void func_80148038(int, int);
+extern void func_80147460(int);
+extern void func_8014ED28(s32 _arg0);
+extern void func_80146D90(int);
+extern void func_80161450(void *a0);
+extern void func_80157A8C(int);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern void func_80146CA0(void *a0);
+extern int func_80155FF8(int arg, int a1);
+extern void func_80154A74(int, int);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern s32 func_801725A4(u8 *a0);
+
+
+void func_8015795C(int param_1)
+{
+
+ extern unsigned char D_800D5178;
+ extern unsigned char D_8018067C;
+ int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */
+ int iVar1;
+ unsigned int uVar2;
+
+ *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2;
+ ((int (*)(int, int))func_80147A10)(param_1, 0x400);
+ if (*(int *)(param_1 + 0x2c) >= 0) {
+ *(int *)(param_1 + 0x2c) = 0;
+ }
+ func_80147A84(param_1);
+ ((void (*)(int))func_801473EC)(param_1);
+ func_80148038(param_1, 0x1a000);
+ func_80147460(param_1);
+ iVar1 = ((int (*)(int))func_8014ED28)(param_1);
+ if (iVar1 != 0) {
+ func_80146D90(param_1);
+ }
+ uVar2 = ((int (*)(int))func_80161450)(param_1);
+ if ((uVar2 & 5) != 0) {
+ func_80157A8C(param_1);
+ ((void (*)(int, int))func_80146E90)(param_1, 8);
+ ((void (*)(int))func_80146CA0)(param_1);
+ }
+ if (uVar2 == 0) {
+ ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa));
+ if (*(unsigned char *)(param_1 + 0x1c0) != 0) {
+ func_80154A74(param_1, 0x17);
+ ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178);
+ ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018067C);
+ ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000);
+ *(short *)(param_1 + 2) = 4;
+ }
+ ((void (*)(int))func_801725A4)(param_1);
+ }
+ return;
+}
+
+
+DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157a8c (src/shared) */
+
+
+DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157ac8 (src/shared) */
+
+
+DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157b74 (src/shared) */
+
+
+DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157bc8 (src/shared) */
+
+
+DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157ccc (src/shared) */
+
+
+
+/* func_80157D20 — 21-ins plumbing shim (×138 overlays).
+ *
+ * §71 sibling-first: the immediate neighbour func_801578C0 in this very TU
+ * (src/ov_SC01_077/ov_SC01_077_jr_80154C24.c L1592) already matches with
+ * `((void (*)(void))func_80156648)();` — the zero-argument call form. The
+ * target likewise sets up NO argument registers before `jal func_80156648`
+ * ($a0/$a1 still carry this function's own incoming args), so the call is
+ * argument-less here too.
+ *
+ * The `lhu %lo(D_801806BC)($at)` with `sll $s0,$s0,1` => a plain u16 array
+ * indexed by the second parameter, NOT hoisted into a pointer (§20: a pointer
+ * var would keep one address register live across the call; the target rebuilds
+ * the %hi/%lo pair inline after the call returns).
+ *
+ * §73 PARAMS axis / §42 lever 6 — the fleet canon for this symbol is
+ * `extern void func_80157D20(void);` (this TU's carried decl layer, L399, and
+ * every sibling overlay's). A 2-param definition hard-errors with
+ * `conflicting types` in the real TU (rtu_match, byte-verified), and the canon
+ * cannot be widened from a draft (that is an R22 fleet edit). So keep the
+ * `(void)` signature and capture $a0/$a1 with register pins copied into NORMAL
+ * pseudos — the copies are live across `jal func_80156648`, so they get the
+ * callee-saved homes the target uses ($s1 = a0, $s0 = a1). A direct
+ * `register` use would leave the values in call-clobbered $a0/$a1.
+ */
+
+extern void func_80156648(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80157D74(u16 *a0);
+
+void func_80157D20(void)
+{
+
+ extern u16 D_801806BC[];
+ register void *a0v __asm__("$4");
+ register s32 a1v __asm__("$5");
+ void *param_1 = a0v;
+ s32 param_2 = a1v;
+
+ ((void (*)(void))func_80156648)();
+ ((void (*)(void *, s32))func_80147078)(param_1, D_801806BC[param_2]);
+ ((void (*)(void *))func_80157D74)(param_1);
+}
+
+
+DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157d74 (src/shared) */
+
+
+
+
+void func_80157DC4(void *a0) {
+
+ extern void (*D_801806CC[])(void);
+ D_801806CC[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157e00 (src/shared) */
+
+
+DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157e38 (src/shared) */
+
+
+DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157ea4 (src/shared) */
+
+
+DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157f64 (src/shared) */
+
+
+
+
+void func_80157FC4(void *a0) {
+
+ extern void (*D_801806D4[])(void);
+ D_801806D4[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots
+
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147324(s32 arg0);
+extern void func_80146CA0(void *a0);
+
+
+void func_80158038(void * param)
+{
+
+ extern s32 D_800D51E0;
+ extern s32 D_801806A0;
+ *(u8 *)(param + 0x1aa) = 0xe;
+ func_80154274((s32 *)param, (s32)&D_800D51E0);
+ func_80154A74(param, 0x15);
+ func_80146DB8((s32 *)param, &D_801806A0);
+ *(s32 *)(param + 0x234) = 0;
+ func_80146994(5, param, 0xc, 0);
+ func_80147324(0x455);
+ func_80146CA0((void *)param);
+}
+
+
+DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580b4 (src/shared) */
+
+
+DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581ac (src/shared) */
+
+
+
+
+void func_8015824C(void *a0) {
+
+ extern void (*D_801806E0[])(void);
+ D_801806E0[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */
+
+
+DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582c0 (src/shared) */
+
+
+DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */
+
+
+
+// @class: other
+// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code)
+
+extern void func_8014CBF8(void *a0);
+extern void func_801474EC(s32 *a0);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80148038(s32 a0, s32 a1);
+extern void func_80147460(s32 a0);
+extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_801473EC(s32 *a0);
+extern s32 func_801615C4(void *a0, s32 a1);
+extern s32 func_80146E98(s32 a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80146CA0(void *a0);
+extern int func_80155FF8(int arg, int a1);
+
+
+void func_80158434(s32 param_1)
+{
+
+ extern u8 D_801806B0;
+ extern u8 D_800D533C;
+ u32 uVar1;
+ u32 uVar2;
+ s32 frame_pad[4];
+ (void)&frame_pad;
+
+ *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2;
+ if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) {
+ *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1;
+ ((s32 (*)(void))func_8014CBF8)();
+ ((void (*)(s32))func_801474EC)(param_1);
+ ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000);
+ ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801806B0);
+ }
+ if (*(s32 *)(param_1 + 0x234) != 0) {
+ func_80148038(param_1, 0x10000);
+ func_80147460(param_1);
+ func_80147AD4(param_1, 0, 0, 0);
+ ((void (*)(s32))func_801473EC)(param_1);
+ }
+ uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0);
+ if (uVar1 != 0) {
+ if (uVar1 == 1) goto LAB_80158508;
+ uVar2 = uVar1 & 0x2000;
+ } else {
+ uVar2 = func_80146E98(param_1);
+ }
+ if (uVar2 == 0) goto LAB_80158528;
+LAB_80158508:
+ ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C);
+ ((void (*)(s32))func_80146CA0)(param_1);
+ return;
+LAB_80158528:
+ ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA));
+}
+
+
+DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */
+
+
+DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585a4 (src/shared) */
+
+
+DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585ac (src/shared) */
+
+
+DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585ec (src/shared) */
+
+
+
+// @class: loose-typing
+// @stuck: none — MATCH (87 ins, match_one) + symcheck SYMS-OK (17 symbols agree); same file also
+// MATCHes verbatim against ov_SC03_099 and ov_SC06_008 (sibling asm bodies are identical)
+
+/* func_80158638 @ 0x80158638 — ov_SC01_077 / ov_SC01_077_jr_80154C24 (87 ins).
+ *
+ * TWO decl-ROBUSTNESS choices in the BODY, deliberate — these are the only two things the gate's
+ * decl ladder (cast_call_sites/reconcile_tu/sig_unify) CANNOT repair, because they change codegen,
+ * not plumbing. Both are load-bearing for templating this exemplar onto its 138 h_seq siblings,
+ * where each overlay TU carries its own spelling of these decls:
+ *
+ * 1) `*(u16 *)&D_80078EB4` — the target loads it with `lhu`. The ov_SC01_077 TU already carries
+ * `extern s16 D_80078EB4;` (line 504), and a plain `D_80078EB4 != 0` read through an s16 decl
+ * compiles to `lh` => WIDTH/lh!=lhu, closeness 1. A `(u16)` cast does NOT fix it (gcc-2.7.2
+ * folds the zero_extend away for a !=0 test and keeps `lh`); the pointer pun does, and it is
+ * correct under EITHER declared signedness.
+ * 2) `(s16)func_80159464(...)` with the fleet-canonical `extern s32 func_80159464();` decl.
+ * The target truncates the return to 16 bits at BOTH call sites (`sll 16` + `blez`, then
+ * `sll 16`/`sra 16`/`slti 6`). Declaring the callee `s16` also matches, but the fleet's carried
+ * decl layer spells it `extern s32 func_80159464(void);` in 1600 places — if reconcile_tu wins
+ * that conflict the truncation vanishes and the match dies. The explicit cast makes the body
+ * independent of which decl survives.
+ *
+ * Symbols verified present in build/ov_SC01_077/undefined_syms_auto.txt:
+ * D_80078EB4=0x80078EB4 D_800B9A17=0x800B9A17 D_800B9A64=0x800B9A64 D_80110EC0=0x80110EC0
+ */
+
+
+DEFINE_func_80158638() /* dedup: shared engine-core @0x80158638 (src/shared) */
+
+
+void func_80158794(void) {
+}
+
+
+// @class: plumbing
+// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order)
+
+extern void func_80147084(s32 *a0);
+extern void func_80147098(s32 *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern void func_80158880(s32 *param);
+
+void func_8015879C(s32 param_1) {
+
+ extern s32 D_80184288;
+ extern s32 D_80184294;
+ extern s32 D_80184298;
+ D_80184288 = 0;
+ D_80184294 = 1;
+ D_80184298 = 0;
+ *(u8 *)(param_1 + 0xa8) = 0;
+ ((void (*)(void))func_80147084)();
+ ((void (*)(s32))func_80147098)(param_1);
+ ((void (*)(s32))func_801470AC)(param_1);
+ ((void (*)(s32, s32))func_80147078)(param_1, 0x1a);
+ ((void (*)(s32, s32))func_80146C98)(param_1, 1);
+ ((void (*)(s32))func_80158880)(param_1);
+}
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order)
+
+extern void func_80147084(s32 *a0);
+extern void func_80147098(s32 *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80158880(s32 *param);
+
+void func_80158814(void *arg0) {
+
+ extern s32 D_80184288;
+ extern s32 D_80184294;
+ extern s32 D_80184298;
+ D_80184288 = 0;
+ D_80184294 = 1;
+ D_80184298 = 0;
+ *(s8 *)((s32)arg0 + 0xA8) = 0;
+ ((void (*)(void))func_80147084)();
+ ((void (*)(void *))func_80147098)(arg0);
+ ((void (*)(void *))func_801470AC)(arg0);
+ ((void (*)(void *, s32))func_80147078)(arg0, 0x1A);
+ ((void (*)(void *))func_80158880)(arg0);
+}
+
+
+
+extern void func_80149020(s32 *a0);
+
+void func_80158880(s32 *param) {
+
+ extern void (*D_8018071C[])(s32 *);
+ func_80149020(param);
+ D_8018071C[*(u8 *)((s32)param + 0x4F)](param);
+}
+
+
+INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801555F4", func_801588CC);
+
+DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158ab4 (src/shared) */
+
+
+DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158ae4 (src/shared) */
+
+
+
+extern void func_80146CA0(void *a0);
+extern s32 func_801472C8(struct S *a0);
+extern void func_80147324(s32 a0);
+extern void func_801474D8(s32 *a0);
+extern void func_801474EC(s32 *a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+
+void func_80158BB0(void *arg0) {
+
+ extern M2C_UNK D_800D58D8;
+ extern s32 D_80184288;
+ if (D_80184288 == 0) {
+ D_80184288 = 1;
+ }
+ func_80147324(0x456);
+ func_80154274(arg0, &D_800D58D8);
+ func_80154A74(arg0, 0x16);
+ M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000;
+ M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0;
+ func_801474EC(arg0);
+ func_801474D8(arg0);
+ func_801472C8(arg0);
+ func_80146CA0(arg0);
+}
+
+
+DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158c40 (src/shared) */
+
+
+DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158cd8 (src/shared) */
+
+
+DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158d60 (src/shared) */
+
+
+DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158e24 (src/shared) */
+
+
+
+// @class: other
+// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot)
+
+
+extern int rand(void);
+extern s32 func_8013767C(s32 a0);
+extern void func_80146CA0(void *a0);
+
+void func_80158F00(int param_1) {
+
+ extern s32 D_80184294;
+ extern s32 D_801806F0[];
+ int *self = (int *)param_1;
+ struct Actor *act = (struct Actor *)self[0x20 / 4];
+ int gate = D_80184294;
+
+ act->timer = (u16)((act->timer + 0x16) & 0xfff);
+
+ if (gate == 0) {
+ s32 r = rand();
+ *(s32 *)(param_1 + 0x198) = func_8013767C(D_801806F0[r % 0xb]);
+ ((void (*)(int))func_80146CA0)(param_1);
+ }
+}
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464
+// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used
+// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz
+// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C);
+// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg.
+
+
+extern u16 func_80148800(s32 *a0);
+extern s32 func_801399F0(s32);
+extern void func_80139914(s32);
+extern s32 func_80159464(void);
+extern void func_801594E8(s32, s32);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern s32 func_8013767C(s32 a0);
+extern void func_80146CA0(void *a0);
+
+void func_80158FA4(s32 param_1)
+{
+
+ extern s32 D_80184298;
+ extern u8 D_80110C3C[];
+ s32 v0;
+ s16 sVar1;
+
+ v0 = *(s32 *)(param_1 + 0x20);
+ *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff;
+ if (((s32 (*)(void))func_80148800)() & 0xf0) {
+ D_80184298 = 1;
+ }
+ if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) {
+ func_80139914(*(s32 *)(param_1 + 0x198));
+ *(s32 *)(param_1 + 0x198) = 0;
+ sVar1 = ((s32 (*)(s32))func_80159464)(param_1);
+ if (sVar1 != 0) {
+ func_801594E8(param_1, sVar1);
+ ((void (*)(s32, s32))func_80146C98)(param_1, 0xc);
+ } else {
+ *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C));
+ ((void (*)(s32))func_80146CA0)(param_1);
+ }
+ }
+}
+
+
+DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */
+
+
+DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */
+
+
+DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592cc (src/shared) */
+
+
+
+extern void func_80145BF8(void);
+extern void func_80146CA0(void *a0);
+
+void func_8015934C(void *arg0) {
+
+ extern u8 D_800AE6BD;
+ extern s32 D_80184288;
+ extern s32 D_80184290;
+ void *temp_v1;
+
+ if (D_80184288 == 4) {
+ D_80184288 = 5;
+ }
+ if (D_80184290 != 0) {
+ func_80145BF8();
+ func_80146CA0(arg0);
+ D_800AE6BD += 1;
+ }
+ temp_v1 = M2C_FIELD(arg0, void **, 0x20);
+ M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF);
+}
+
+
+DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593e4 (src/shared) */
+
+
+DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */
+
+
+DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */
+
+
+
+extern s16 currentLocationId;
+extern s32 func_80029A94(s32);
+
+
+s32 func_80159464(void) {
+
+ extern Entry D_80180758[];
+ Entry *e;
+
+ e = D_80180758;
+ while (e->id != 0) {
+ if (currentLocationId == e->id) {
+ return e->val;
+ }
+ e++;
+ }
+ if (func_80029A94(1) != 0) {
+ goto ret0;
+ }
+ if (func_80029A94(0) != 0) {
+ goto ret0;
+ }
+ return -1;
+ret0:
+ return 0;
+}
+
+
+INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801555F4", func_801594E8);
+
+
+
+void func_80159698(void *a0) {
+
+ extern void (*D_8018096C[])(void);
+ D_8018096C[*(u8 *)((s32)a0 + 0x15)]();
+}
+
+
+DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596d4 (src/shared) */
+
+
+
+// @class: iv-combine
+// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8;
+// p gcc emits the
+// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a
+// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual
+// guarded do-while `if(base+0x2A8= ab + 0x22) {
+ *q |= orc;
+ }
+ q += 0x21;
+ } while (q < (u32 *)(base + 0x65AC));
+ }
+
+ (*(s16 *)&D_801270C0) = 3;
+ ((void (*)(s32))func_80129248)(0);
+ func_8013C938();
+ func_8013CB20();
+ func_8013C98C();
+ func_8002850C(0x800, 0x800, 0x800);
+ func_80028620(0, &(*(u8 *)&D_8018078C));
+ func_80028620(1, &(*(u8 *)&D_8018078C) + 0x10);
+ func_80028620(2, &(*(u8 *)&D_8018078C) + 0x20);
+ *(s32 *)(param_1 + 0x28) = 0xff;
+ *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
+ }
+ return 0;
+}
+
+
+DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */
+
+
+DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987c (src/shared) */
+
+
+DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598bc (src/shared) */
+
+
+DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598e0 (src/shared) */
+
+
+
+
+void func_80159968(void *a0) {
+
+ extern void (*D_80180A10[])(void);
+ D_80180A10[*(u8 *)((s32)a0 + 0x4D)]();
+}
+
+
+
+
+void func_801599A4(void *a0) {
+
+ extern void (*D_80180A1C[])(void);
+ D_80180A1C[*(u16 *)((s32)a0 + 0x0)]();
+}
+
+
+DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
+
+
+void func_80159A18(void) {
+}
+
+INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801555F4", func_80159A20);
+
+DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
+
+
+DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159b3c (src/shared) */
+
+
+
+
+void func_80159B70(void *a0) {
+
+ extern void (*D_80180B64[])(void);
+ D_80180B64[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159bac (src/shared) */
+
+
+
+// @class: schedule
+// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a
+// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm
+// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch
+// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`.
+
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80154150(s32 a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553C0(s32 a0);
+extern void func_801553A8(s32 *a0);
+extern s32 func_80172590(u8 *a0);
+extern void func_80146CA0(void *a0);
+
+
+void func_80159BE4(s32 arg0)
+{
+
+ extern unsigned char D_80180980;
+ int v;
+
+ ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180980);
+ if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) {
+ func_80154150(arg0, 5);
+ func_80154A74(arg0, 0x1C);
+ } else {
+ func_80154150(arg0, 4);
+ func_80154A74(arg0, 0x11);
+ }
+ *(int *)(arg0 + 0x234) = 0;
+ *(int *)(arg0 + 0x238) = 0;
+ func_801553C0(arg0);
+ ((void (*)(int))func_801553A8)(arg0);
+ ((void (*)(int))func_80172590)(arg0);
+ ((void (*)(int))func_80146CA0)(arg0);
+}
+
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 44af30c8f..f1b8ed46a 100644
--- a/src/ov_SC02_037/ov_SC02_037_jr_8013F350.c
+++ b/src/ov_SC02_037/ov_SC02_037_jr_8013F350.c
@@ -7145,1037 +7145,3 @@ void func_80155580(void *a0) {
DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555bc (src/shared) */
-
-
-INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_801555F4);
-
-DEFINE_func_80155800() /* dedup: shared engine-core @0x80155800 (src/shared) */
-
-
-DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155a44 (src/shared) */
-
-
-DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155b20 (src/shared) */
-
-
-DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155b9c (src/shared) */
-
-
-DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155c0c (src/shared) */
-
-
-DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155c64 (src/shared) */
-
-
-DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155d70 (src/shared) */
-
-
-DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155e30 (src/shared) */
-
-
-DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155ea4 (src/shared) */
-
-
-void func_80155F58(void) {
-}
-
-DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155f60 (src/shared) */
-
-
-DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155f80 (src/shared) */
-
-
-DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155fb0 (src/shared) */
-
-
-DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155fd4 (src/shared) */
-
-
-DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155ff8 (src/shared) */
-
-
-
-void func_80156044(int param_1, int param_2)
-{
- extern u32 func_8015616C(s32 a0, u16 a1);
- extern void func_80156670(s32, s32, s32, s32, s32, u16);
- extern void func_801567BC(s32 a0);
- extern void func_80156848(s32, s32);
- extern void func_80156A88(s32 a0, s32 a1);
- extern s32 func_801565C0(void);
- extern u8 D_80185C34;
- extern u8 D_80185C48;
- extern u8 D_80185ACC;
-
- register s32 puVar2 __asm__("$2");
- register s32 iVar3 __asm__("$3");
- u8 *puVar4;
- s32 uVar1;
-
- if (((u32)param_2) & 0x10000) {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_80185C34;
- } else if (((u32)param_2) & 0x20000) {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_80185C48;
- } else {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_80185ACC;
- }
- puVar4 = (u8 *)(iVar3 + puVar2);
- uVar1 = func_8015616C(((s32)param_1), *(u16 *)puVar4) & 0xffff;
- if (*(u8 *)(((s32)param_1) + 0x1a8) != 0) {
- ((void (*)(s32, s32, s32, s32, s32, s32))func_80156670)(((s32)param_1), *(s32 *)puVar4, uVar1, *(s32 *)(puVar4 + 4),
- *(u8 *)(puVar4 + 0xA), *(u16 *)(puVar4 + 0x12));
- if (*(u8 *)(puVar4 + 0x10) != 0) {
- func_801567BC(((s32)param_1));
- }
- ((void (*)(s32, s32, s32))func_80156848)(((s32)param_1), (s32)puVar4, uVar1);
- func_80156A88(((s32)param_1), (s32)puVar4);
- if (((s32 (*)(s32))func_801565C0)(((s32)param_1)) != 0) {
- *(u8 *)(((s32)param_1) + 0x1c0) = 1;
- }
- }
-}
-
-
-DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616c (src/shared) */
-
-
-DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */
-
-
-
-
-S801563EC *func_801563EC(u16 idx) {
-
- extern S801563EC D_80185C70[];
- return &D_80185C70[idx];
-}
-
-
-DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640c (src/shared) */
-
-
-DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564b0 (src/shared) */
-
-
-DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565c0 (src/shared) */
-
-
-DEFINE_func_80156600() /* dedup: shared engine-core @0x80156600 (src/shared) */
-
-
-DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */
-
-
-
-DEFINE_func_80156670() /* dedup: shared engine-core @0x80156670 (src/shared) */
-
-
-DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567bc (src/shared) */
-
-
-DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */
-
-
-DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156a14 (src/shared) */
-
-
-
-// @class: struct
-// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185EE0 indexed halfword folds %lo
-extern void func_80147324(s32 arg0);
-
-void func_80156A1C(s32 param_1, s32 param_2)
-{
-
- extern unsigned char D_8011520C[];
- extern unsigned short D_80185EE0[];
- if (*(unsigned char *)(param_1 + 0xDA) == 0) {
- func_80147324(D_80185EE0[D_8011520C[param_2]]);
- *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1;
- }
-}
-
-
-DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156a88 (src/shared) */
-
-
-DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156b74 (src/shared) */
-
-
-DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ecc (src/shared) */
-
-
-DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156fa8 (src/shared) */
-
-
-DEFINE_func_80157158() /* dedup: shared engine-core @0x80157158 (src/shared) */
-
-
-DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571c4 (src/shared) */
-
-
-DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574dc (src/shared) */
-
-
-DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */
-
-
-
-
-void func_80157544(void *a0) {
-
- extern void (*D_80185EF0[])(void);
- D_80185EF0[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */
-
-
-DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575e4 (src/shared) */
-
-
-DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576a8 (src/shared) */
-
-
-DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771c (src/shared) */
-
-
-DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773c (src/shared) */
-
-
-void func_80147078(s32 *a0, s16 a1);
-void func_801578C0(s32 a0);
-
-void func_80157788(s32 *a0)
-{
- /* [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_801C8578;
- D_801C8578 = 0x12C;
- func_80147078(a0, 7);
- func_801578C0((s32)a0);
-}
-
-
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80157808(s32 *a0);
-
-void func_801577C8(s32 *param_1)
-{
- /* [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_801C8578;
- D_801C8578 = 0x12C;
- func_80147078(param_1, 7);
- func_80157808(param_1);
-}
-
-
-INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_80157808);
-
-DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274
-
-extern void func_80156648(s32 *a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_80147324(s32 arg0);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_80146CA0(void *a0);
-extern s32 func_801725A4(u8 *a0);
-
-void func_801578C0(s32 param_1)
-{
-
- extern u8 D_800D5128;
- extern u8 D_80185EF8;
- ((void (*)(void))func_80156648)();
- *(u8 *)(param_1 + 0x1AA) = 9;
- func_80154274((s32 *)param_1, (s32)&D_800D5128);
- ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15);
- func_80147324(0xC20);
- ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185EF8);
- ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0);
- ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0);
- ((void (*)(s32 *))func_80146CA0)((s32 *)param_1);
- ((void (*)(s32 *))func_801725A4)((s32 *)param_1);
-}
-
-
-
-// @class: other
-// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only
-// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves
-// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT
-// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16
-// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH.
-
-extern void func_80147A10(int a0, int a1);
-extern void func_80147A84(int);
-extern void func_801473EC(s32 *a0);
-extern void func_80148038(int, int);
-extern void func_80147460(int);
-extern void func_8014ED28(s32 _arg0);
-extern void func_80146D90(int);
-extern void func_80161450(void *a0);
-extern void func_80157A8C(int);
-extern void func_80146E90(s32 *a0, s32 a1);
-extern void func_80146CA0(void *a0);
-extern int func_80155FF8(int arg, int a1);
-extern void func_80154A74(int, int);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_801477E8(s32 *a0, s32 a1);
-extern s32 func_801725A4(u8 *a0);
-
-
-void func_8015795C(int param_1)
-{
-
- extern unsigned char D_800D5178;
- extern unsigned char D_80185F08;
- int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */
- int iVar1;
- unsigned int uVar2;
-
- *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2;
- ((int (*)(int, int))func_80147A10)(param_1, 0x400);
- if (*(int *)(param_1 + 0x2c) >= 0) {
- *(int *)(param_1 + 0x2c) = 0;
- }
- func_80147A84(param_1);
- ((void (*)(int))func_801473EC)(param_1);
- func_80148038(param_1, 0x1a000);
- func_80147460(param_1);
- iVar1 = ((int (*)(int))func_8014ED28)(param_1);
- if (iVar1 != 0) {
- func_80146D90(param_1);
- }
- uVar2 = ((int (*)(int))func_80161450)(param_1);
- if ((uVar2 & 5) != 0) {
- func_80157A8C(param_1);
- ((void (*)(int, int))func_80146E90)(param_1, 8);
- ((void (*)(int))func_80146CA0)(param_1);
- }
- if (uVar2 == 0) {
- ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa));
- if (*(unsigned char *)(param_1 + 0x1c0) != 0) {
- func_80154A74(param_1, 0x17);
- ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178);
- ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185F08);
- ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000);
- *(short *)(param_1 + 2) = 4;
- }
- ((void (*)(int))func_801725A4)(param_1);
- }
- return;
-}
-
-
-DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157a8c (src/shared) */
-
-
-DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157ac8 (src/shared) */
-
-
-DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157b74 (src/shared) */
-
-
-DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157bc8 (src/shared) */
-
-
-DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157ccc (src/shared) */
-
-
-
-/* func_80157D20 — 21-ins plumbing shim (×138 overlays).
- *
- * §71 sibling-first: the immediate neighbour func_801578C0 in this very TU
- * (src/ov_SC01_077/ov_SC01_077_jr_80154C24.c L1592) already matches with
- * `((void (*)(void))func_80156648)();` — the zero-argument call form. The
- * target likewise sets up NO argument registers before `jal func_80156648`
- * ($a0/$a1 still carry this function's own incoming args), so the call is
- * argument-less here too.
- *
- * The `lhu %lo(D_80185F48)($at)` with `sll $s0,$s0,1` => a plain u16 array
- * indexed by the second parameter, NOT hoisted into a pointer (§20: a pointer
- * var would keep one address register live across the call; the target rebuilds
- * the %hi/%lo pair inline after the call returns).
- *
- * §73 PARAMS axis / §42 lever 6 — the fleet canon for this symbol is
- * `extern void func_80157D20(void);` (this TU's carried decl layer, L399, and
- * every sibling overlay's). A 2-param definition hard-errors with
- * `conflicting types` in the real TU (rtu_match, byte-verified), and the canon
- * cannot be widened from a draft (that is an R22 fleet edit). So keep the
- * `(void)` signature and capture $a0/$a1 with register pins copied into NORMAL
- * pseudos — the copies are live across `jal func_80156648`, so they get the
- * callee-saved homes the target uses ($s1 = a0, $s0 = a1). A direct
- * `register` use would leave the values in call-clobbered $a0/$a1.
- */
-
-extern void func_80156648(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80157D74(u16 *a0);
-
-void func_80157D20(void)
-{
-
- extern u16 D_80185F48[];
- register void *a0v __asm__("$4");
- register s32 a1v __asm__("$5");
- void *param_1 = a0v;
- s32 param_2 = a1v;
-
- ((void (*)(void))func_80156648)();
- ((void (*)(void *, s32))func_80147078)(param_1, D_80185F48[param_2]);
- ((void (*)(void *))func_80157D74)(param_1);
-}
-
-
-DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157d74 (src/shared) */
-
-
-
-
-void func_80157DC4(void *a0) {
-
- extern void (*D_80185F58[])(void);
- D_80185F58[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157e00 (src/shared) */
-
-
-DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157e38 (src/shared) */
-
-
-DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157ea4 (src/shared) */
-
-
-DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157f64 (src/shared) */
-
-
-
-
-void func_80157FC4(void *a0) {
-
- extern void (*D_80185F60[])(void);
- D_80185F60[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots
-
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_80147324(s32 arg0);
-extern void func_80146CA0(void *a0);
-
-
-void func_80158038(void * param)
-{
-
- extern s32 D_800D51E0;
- extern s32 D_80185F2C;
- *(u8 *)(param + 0x1aa) = 0xe;
- func_80154274((s32 *)param, (s32)&D_800D51E0);
- func_80154A74(param, 0x15);
- func_80146DB8((s32 *)param, &D_80185F2C);
- *(s32 *)(param + 0x234) = 0;
- func_80146994(5, param, 0xc, 0);
- func_80147324(0x455);
- func_80146CA0((void *)param);
-}
-
-
-DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580b4 (src/shared) */
-
-
-DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581ac (src/shared) */
-
-
-
-
-void func_8015824C(void *a0) {
-
- extern void (*D_80185F6C[])(void);
- D_80185F6C[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */
-
-
-DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582c0 (src/shared) */
-
-
-DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */
-
-
-
-// @class: other
-// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code)
-
-extern void func_8014CBF8(void *a0);
-extern void func_801474EC(s32 *a0);
-extern void func_801477E8(s32 *a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_80148038(s32 a0, s32 a1);
-extern void func_80147460(s32 a0);
-extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_801473EC(s32 *a0);
-extern s32 func_801615C4(void *a0, s32 a1);
-extern s32 func_80146E98(s32 a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80146CA0(void *a0);
-extern int func_80155FF8(int arg, int a1);
-
-
-void func_80158434(s32 param_1)
-{
-
- extern u8 D_80185F3C;
- extern u8 D_800D533C;
- u32 uVar1;
- u32 uVar2;
- s32 frame_pad[4];
- (void)&frame_pad;
-
- *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2;
- if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) {
- *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1;
- ((s32 (*)(void))func_8014CBF8)();
- ((void (*)(s32))func_801474EC)(param_1);
- ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000);
- ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185F3C);
- }
- if (*(s32 *)(param_1 + 0x234) != 0) {
- func_80148038(param_1, 0x10000);
- func_80147460(param_1);
- func_80147AD4(param_1, 0, 0, 0);
- ((void (*)(s32))func_801473EC)(param_1);
- }
- uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0);
- if (uVar1 != 0) {
- if (uVar1 == 1) goto LAB_80158508;
- uVar2 = uVar1 & 0x2000;
- } else {
- uVar2 = func_80146E98(param_1);
- }
- if (uVar2 == 0) goto LAB_80158528;
-LAB_80158508:
- ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C);
- ((void (*)(s32))func_80146CA0)(param_1);
- return;
-LAB_80158528:
- ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA));
-}
-
-
-DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */
-
-
-DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585a4 (src/shared) */
-
-
-DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585ac (src/shared) */
-
-
-DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585ec (src/shared) */
-
-
-
-// @class: loose-typing
-// @stuck: none — MATCH (87 ins, match_one) + symcheck SYMS-OK (17 symbols agree); same file also
-// MATCHes verbatim against ov_SC03_099 and ov_SC06_008 (sibling asm bodies are identical)
-
-/* func_80158638 @ 0x80158638 — ov_SC01_077 / ov_SC01_077_jr_80154C24 (87 ins).
- *
- * TWO decl-ROBUSTNESS choices in the BODY, deliberate — these are the only two things the gate's
- * decl ladder (cast_call_sites/reconcile_tu/sig_unify) CANNOT repair, because they change codegen,
- * not plumbing. Both are load-bearing for templating this exemplar onto its 138 h_seq siblings,
- * where each overlay TU carries its own spelling of these decls:
- *
- * 1) `*(u16 *)&D_80078EB4` — the target loads it with `lhu`. The ov_SC01_077 TU already carries
- * `extern s16 D_80078EB4;` (line 504), and a plain `D_80078EB4 != 0` read through an s16 decl
- * compiles to `lh` => WIDTH/lh!=lhu, closeness 1. A `(u16)` cast does NOT fix it (gcc-2.7.2
- * folds the zero_extend away for a !=0 test and keeps `lh`); the pointer pun does, and it is
- * correct under EITHER declared signedness.
- * 2) `(s16)func_80159464(...)` with the fleet-canonical `extern s32 func_80159464();` decl.
- * The target truncates the return to 16 bits at BOTH call sites (`sll 16` + `blez`, then
- * `sll 16`/`sra 16`/`slti 6`). Declaring the callee `s16` also matches, but the fleet's carried
- * decl layer spells it `extern s32 func_80159464(void);` in 1600 places — if reconcile_tu wins
- * that conflict the truncation vanishes and the match dies. The explicit cast makes the body
- * independent of which decl survives.
- *
- * Symbols verified present in build/ov_SC01_077/undefined_syms_auto.txt:
- * D_80078EB4=0x80078EB4 D_800B9A17=0x800B9A17 D_800B9A64=0x800B9A64 D_80110EC0=0x80110EC0
- */
-
-
-DEFINE_func_80158638() /* dedup: shared engine-core @0x80158638 (src/shared) */
-
-
-void func_80158794(void) {
-}
-
-
-// @class: plumbing
-// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order)
-
-extern void func_80147084(s32 *a0);
-extern void func_80147098(s32 *a0);
-extern void func_801470AC(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80146C98(s32 *a0, s16 a1);
-extern void func_80158880(s32 *param);
-
-void func_8015879C(s32 param_1) {
-
- extern s32 D_801C8580;
- extern s32 D_801C858C;
- extern s32 D_801C8590;
- D_801C8580 = 0;
- D_801C858C = 1;
- D_801C8590 = 0;
- *(u8 *)(param_1 + 0xa8) = 0;
- ((void (*)(void))func_80147084)();
- ((void (*)(s32))func_80147098)(param_1);
- ((void (*)(s32))func_801470AC)(param_1);
- ((void (*)(s32, s32))func_80147078)(param_1, 0x1a);
- ((void (*)(s32, s32))func_80146C98)(param_1, 1);
- ((void (*)(s32))func_80158880)(param_1);
-}
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order)
-
-extern void func_80147084(s32 *a0);
-extern void func_80147098(s32 *a0);
-extern void func_801470AC(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80158880(s32 *param);
-
-void func_80158814(void *arg0) {
-
- extern s32 D_801C8580;
- extern s32 D_801C858C;
- extern s32 D_801C8590;
- D_801C8580 = 0;
- D_801C858C = 1;
- D_801C8590 = 0;
- *(s8 *)((s32)arg0 + 0xA8) = 0;
- ((void (*)(void))func_80147084)();
- ((void (*)(void *))func_80147098)(arg0);
- ((void (*)(void *))func_801470AC)(arg0);
- ((void (*)(void *, s32))func_80147078)(arg0, 0x1A);
- ((void (*)(void *))func_80158880)(arg0);
-}
-
-
-
-extern void func_80149020(s32 *a0);
-
-void func_80158880(s32 *param) {
-
- extern void (*D_80185FA8[])(s32 *);
- func_80149020(param);
- D_80185FA8[*(u8 *)((s32)param + 0x4F)](param);
-}
-
-
-INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_801588CC);
-
-DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158ab4 (src/shared) */
-
-
-DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158ae4 (src/shared) */
-
-
-
-extern void func_80146CA0(void *a0);
-extern s32 func_801472C8(struct S *a0);
-extern void func_80147324(s32 a0);
-extern void func_801474D8(s32 *a0);
-extern void func_801474EC(s32 *a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-
-void func_80158BB0(void *arg0) {
-
- extern M2C_UNK D_800D58D8;
- extern s32 D_801C8580;
- if (D_801C8580 == 0) {
- D_801C8580 = 1;
- }
- func_80147324(0x456);
- func_80154274(arg0, &D_800D58D8);
- func_80154A74(arg0, 0x16);
- M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000;
- M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0;
- func_801474EC(arg0);
- func_801474D8(arg0);
- func_801472C8(arg0);
- func_80146CA0(arg0);
-}
-
-
-DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158c40 (src/shared) */
-
-
-DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158cd8 (src/shared) */
-
-
-DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158d60 (src/shared) */
-
-
-DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158e24 (src/shared) */
-
-
-
-// @class: other
-// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot)
-
-
-extern int rand(void);
-extern s32 func_8013767C(s32 a0);
-extern void func_80146CA0(void *a0);
-
-void func_80158F00(int param_1) {
-
- extern s32 D_801C858C;
- extern s32 D_80185F7C[];
- int *self = (int *)param_1;
- struct Actor *act = (struct Actor *)self[0x20 / 4];
- int gate = D_801C858C;
-
- act->timer = (u16)((act->timer + 0x16) & 0xfff);
-
- if (gate == 0) {
- s32 r = rand();
- *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185F7C[r % 0xb]);
- ((void (*)(int))func_80146CA0)(param_1);
- }
-}
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464
-// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used
-// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz
-// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C);
-// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg.
-
-
-extern u16 func_80148800(s32 *a0);
-extern s32 func_801399F0(s32);
-extern void func_80139914(s32);
-extern s32 func_80159464(void);
-extern void func_801594E8(s32, s32);
-extern void func_80146C98(s32 *a0, s16 a1);
-extern s32 func_8013767C(s32 a0);
-extern void func_80146CA0(void *a0);
-
-void func_80158FA4(s32 param_1)
-{
-
- extern s32 D_801C8590;
- extern u8 D_80110C3C[];
- s32 v0;
- s16 sVar1;
-
- v0 = *(s32 *)(param_1 + 0x20);
- *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff;
- if (((s32 (*)(void))func_80148800)() & 0xf0) {
- D_801C8590 = 1;
- }
- if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) {
- func_80139914(*(s32 *)(param_1 + 0x198));
- *(s32 *)(param_1 + 0x198) = 0;
- sVar1 = ((s32 (*)(s32))func_80159464)(param_1);
- if (sVar1 != 0) {
- func_801594E8(param_1, sVar1);
- ((void (*)(s32, s32))func_80146C98)(param_1, 0xc);
- } else {
- *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C));
- ((void (*)(s32))func_80146CA0)(param_1);
- }
- }
-}
-
-
-DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */
-
-
-DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */
-
-
-DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592cc (src/shared) */
-
-
-
-extern void func_80145BF8(void);
-extern void func_80146CA0(void *a0);
-
-void func_8015934C(void *arg0) {
-
- extern u8 D_800AE6BD;
- extern s32 D_801C8580;
- extern s32 D_801C8588;
- void *temp_v1;
-
- if (D_801C8580 == 4) {
- D_801C8580 = 5;
- }
- if (D_801C8588 != 0) {
- func_80145BF8();
- func_80146CA0(arg0);
- D_800AE6BD += 1;
- }
- temp_v1 = M2C_FIELD(arg0, void **, 0x20);
- M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF);
-}
-
-
-DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593e4 (src/shared) */
-
-
-DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */
-
-
-DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */
-
-
-
-extern s16 currentLocationId;
-extern s32 func_80029A94(s32);
-
-
-s32 func_80159464(void) {
-
- extern Entry D_80185FE4[];
- Entry *e;
-
- e = D_80185FE4;
- while (e->id != 0) {
- if (currentLocationId == e->id) {
- return e->val;
- }
- e++;
- }
- if (func_80029A94(1) != 0) {
- goto ret0;
- }
- if (func_80029A94(0) != 0) {
- goto ret0;
- }
- return -1;
-ret0:
- return 0;
-}
-
-
-INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_801594E8);
-
-
-
-void func_80159698(void *a0) {
-
- extern void (*D_801861F8[])(void);
- D_801861F8[*(u8 *)((s32)a0 + 0x15)]();
-}
-
-
-DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596d4 (src/shared) */
-
-
-
-// @class: iv-combine
-// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8;
-// p gcc emits the
-// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a
-// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual
-// guarded do-while `if(base+0x2A8= ab + 0x22) {
- *q |= orc;
- }
- q += 0x21;
- } while (q < (u32 *)(base + 0x65AC));
- }
-
- (*(s16 *)&D_801270C0) = 3;
- ((void (*)(s32))func_80129248)(0);
- func_8013C938();
- func_8013CB20();
- func_8013C98C();
- func_8002850C(0x800, 0x800, 0x800);
- func_80028620(0, &(*(u8 *)&D_80186018));
- func_80028620(1, &(*(u8 *)&D_80186018) + 0x10);
- func_80028620(2, &(*(u8 *)&D_80186018) + 0x20);
- *(s32 *)(param_1 + 0x28) = 0xff;
- *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
- }
- return 0;
-}
-
-
-DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */
-
-
-DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987c (src/shared) */
-
-
-DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598bc (src/shared) */
-
-
-DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598e0 (src/shared) */
-
-
-
-
-void func_80159968(void *a0) {
-
- extern void (*D_8018629C[])(void);
- D_8018629C[*(u8 *)((s32)a0 + 0x4D)]();
-}
-
-
-
-
-void func_801599A4(void *a0) {
-
- extern void (*D_801862A8[])(void);
- D_801862A8[*(u16 *)((s32)a0 + 0x0)]();
-}
-
-
-DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
-
-
-void func_80159A18(void) {
-}
-
-INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_80159A20);
-
-DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
-
-
-DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159b3c (src/shared) */
-
-
-
-
-void func_80159B70(void *a0) {
-
- extern void (*D_801863F0[])(void);
- D_801863F0[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159bac (src/shared) */
-
-
-
-// @class: schedule
-// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a
-// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm
-// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch
-// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`.
-
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_80154150(s32 a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_801553C0(s32 a0);
-extern void func_801553A8(s32 *a0);
-extern s32 func_80172590(u8 *a0);
-extern void func_80146CA0(void *a0);
-
-
-void func_80159BE4(s32 arg0)
-{
-
- extern unsigned char D_8018620C;
- int v;
-
- ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018620C);
- if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) {
- func_80154150(arg0, 5);
- func_80154A74(arg0, 0x1C);
- } else {
- func_80154150(arg0, 4);
- func_80154A74(arg0, 0x11);
- }
- *(int *)(arg0 + 0x234) = 0;
- *(int *)(arg0 + 0x238) = 0;
- func_801553C0(arg0);
- ((void (*)(int))func_801553A8)(arg0);
- ((void (*)(int))func_80172590)(arg0);
- ((void (*)(int))func_80146CA0)(arg0);
-}
diff --git a/src/ov_SC02_037/ov_SC02_037_jr_801555F4.c b/src/ov_SC02_037/ov_SC02_037_jr_801555F4.c
new file mode 100644
index 000000000..aa875c715
--- /dev/null
+++ b/src/ov_SC02_037/ov_SC02_037_jr_801555F4.c
@@ -0,0 +1,3128 @@
+#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. */
+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;
+typedef struct {
+ u16 f0, f2, f4;
+ s16 f6;
+} Blk801539F8;
+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(void);
+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 s32 D_80126AEC;
+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_800B9AAC[];
+extern s16 D_800B9AAE[];
+extern s16 D_800B9AB0[];
+extern s16 D_800B9AB2[];
+extern s16 D_800B9AB4[];
+extern s16 D_800B9AB6[];
+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 u8 D_80126948[];
+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 u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
+extern s32 D_80126FA8[];
+extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
+extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
+extern s32 D_800AE688[];
+extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
+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 s32 D_801151D4;
+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 *D_80126B78;
+extern s32 *D_80126B90;
+extern s32 D_80126B58;
+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_801274D4;
+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 u8 D_800AF630[];
+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 s32 D_80127520;
+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 s32 D_801151D0;
+extern u16 D_8011511A;
+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 short D_80115128;
+extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2);
+extern s32 func_8014032C(s32 param_1, s32 param_2);
+extern s32 func_80028D58(void);
+extern s32 func_80028DE0(void);
+extern s32 func_80028FBC(void);
+extern s32 func_80029000(void);
+extern s32 func_80028D9C(void);
+extern s16 func_8014168C(s16);
+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 void func_80140E6C(void);
+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 void func_80140F00(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_80115148[];
+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 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);
+extern void func_801458E0(void);
+extern s32 D_800AE6AC;
+extern s32 D_800AE6B0;
+extern s16 D_800B9A0A;
+extern u8 D_80078E50;
+extern void func_800D185C(u8 *a0);
+extern void func_801458E8(void);
+extern void func_80145B24(void);
+extern void func_80145934(void);
+extern void func_80145A2C(void);
+extern void func_80162120(void);
+extern void func_80029124(s32, s32);
+extern s32 func_80165A50(s32);
+extern void func_80029514(s32);
+extern u8 D_80078EC0;
+extern void func_80145BF8(void);
+extern void func_80145C54(void);
+extern void func_80146014(s32 a0);
+extern void func_80145EE8(s32 param_1);
+extern void MoveImage(void *a0, s32 a1, s32 a2);
+extern s32 func_80146128(void);
+extern void func_80146360(void);
+extern void func_801463A0();
+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_8014C6F4();
+extern void func_80155150(s32 a0);
+extern void func_801470C0(s32 a0);
+extern void func_80147478(s32 a0);
+extern void func_80147118(s32 a0);
+extern void func_8014BDE8(s32 a0);
+extern short func_801508F8(s32 a0);
+extern void func_8014B5B0(s32 *a0);
+extern void func_80161D88(s32 a0);
+extern void func_801463A0(void);
+extern s32 D_80127098;
+extern s32 D_80127094;
+extern s32 D_80127090;
+extern void func_80146534(void);
+extern void func_8001D074(s32 a0, s32 a1);
+extern void func_80146554(void);
+extern void func_80146578(void);
+extern void func_8001CFDC(s32, s32);
+extern void func_8014659C(void);
+extern void func_8001D074(s32, s32);
+extern void func_801465C0(void);
+extern void func_801465E4(void);
+extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8);
+extern s32 D_8011F9D0;
+extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13);
+extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5);
+extern u16 *func_80146750(u16 *param_1);
+extern u16 *func_8014680C(short *param_1);
+extern void aF801466F0(u16 a0, s32 a1, u16 a2, u16 a3, u16 sp5, s32 sp6, s32 sp7, s32 sp8) __asm__("func_801466F0");
+extern void aF801466F0(u16 a0, s32 a1, u16 a2, u16 a3, u16 sp5, s32 sp6, s32 sp7, s32 sp8);
+extern unsigned short D_8011FD10;
+extern int D_8011FA1C;
+extern unsigned short D_8011F9D6;
+extern unsigned short D_8011F9DA;
+extern unsigned short D_8011F9DE;
+extern int D_8011FA20;
+extern int D_8011FA24;
+extern unsigned short * func_80146750(unsigned short *a0);
+extern unsigned short * func_8014680C(short *param_1);
+extern s32 D_8011F750;
+extern s32 D_8011F754;
+extern u8 * func_801468C8(s32 arg0, u8 arg1);
+extern s32 D_8011D030;
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5);
+extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8);
+extern void func_80146AFC(void*);
+extern void aF80146A6C();
+extern s32 func_80146B9C(void *a0);
+extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6);
+extern s32 func_80146B9C(void * arg0);
+extern s32 aF80146AFC();
+extern u16 D_8011DA28;
+extern void func_80146C3C(u8 *a0);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern void func_80146CA0(void *a0);
+extern void func_80146CB4(void *a0);
+extern void func_80146CC8(s32 a0);
+extern void func_80146D30(s32 a0);
+extern void func_80146D80(s32 *a0);
+extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146D90(s32 a0);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern s32 func_80146E98(s32 a0);
+extern void func_80149374(s32 a0, s32 a1);
+extern void func_80146F58(s32 a0, s32 a1);
+extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_8014704C(s32 *a0);
+extern s32 func_80147054(void *a0);
+extern void func_80147060(u8 * a0);
+extern void func_8014706C(void *arg0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80147084(s32 *a0);
+extern void func_8014708C(void *arg0);
+extern s32 func_801470A0(void *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_801470B4(s32 arg0);
+extern s16 D_80126BB8;
+extern s16 D_80126BBA;
+extern s16 D_80126BBC;
+extern void func_80147264(s32 a0);
+extern void func_80147290(void);
+extern void func_801472B4(void *a0);
+extern s32 func_801472C8(struct S *a0);
+extern void *D_8012707C;
+extern void func_801472DC(void);
+extern void func_801472F0(void *a0);
+extern void func_80147364();
+extern void func_80147300(u16 arg0);
+extern void func_80147324(s32 arg0);
+extern void func_80015978(s32, s32*);
+extern s32 aF8012E5CC(s32, s32, s32) __asm__("func_8012E5CC");
+extern void aF80147364();
+extern void func_801473EC(s32 *a0);
+extern void func_80147460(s32 a0);
+extern void func_80147514();
+extern void func_80147628(s32 a0);
+extern void func_801474D8(s32 *a0);
+extern void func_801474EC(s32 *a0);
+extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2);
+extern s32 func_800129CC(s32 a0, s32 a1);
+extern void func_80147514(s32 arg0);
+extern void func_80013F3C(s32 a0);
+extern void func_80012558(s32 a0, s32 a1);
+extern void func_800126C4(s32 a0, s32 a1);
+extern void func_800123F0(s32 a0, s32 a1);
+extern void func_80147718(s32 a0);
+extern void func_80147788(void *a0, s32 a1);
+extern void func_801477A8(void *a0, s32 a1);
+extern void func_801477C8(void *a0, s32 a1);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern void func_80147814(s32 a0, s32 a1);
+extern void func_80147928(int a0, int a1);
+extern void func_8014799C(int a0, int a1);
+extern void func_80147A10(int a0, int a1);
+extern void func_80147860(int a0, int a1, int a2, int a3);
+extern void func_80147948(s32 a0, s32 a1, s32 a2);
+extern void func_801479BC(s32 a0, s32 a1, s32 a2);
+extern void func_80147A30(s32 a0, s32 a1, s32 a2);
+extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147948(int a0, int a1, int a2);
+extern void func_801479BC(int a0, int a1, int a2);
+extern void func_80147A30(int a0, int a1, int a2);
+extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147A84(s32 arg0);
+extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147AAC(s32 arg0);
+extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
+extern void func_80147B5C(s32 a0, void *a1);
+extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4);
+extern void func_80147B18(s32 a0);
+extern void func_80147B5C(s32 arg0, void *arg1);
+extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147DC0(s32 a0, s32 a1);
+extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4);
+extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147F50(s32 arg0);
+extern volatile s32 D_80127090;
+extern volatile s32 D_80127094;
+extern volatile s32 D_80127098;
+extern void func_80147F78(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80148038(s32 a0, s32 a1);
+extern s32 csqrt(s32 a0);
+extern s32 func_80012A60(s32 a0, s32 a1);
+extern void func_80148094(int param_1, short *param_2, int *param_3);
+extern void func_80015978(int a0, int *a1);
+extern int func_80133784(int a0, void *a1, int a2);
+extern void func_801483E8(unsigned char *self);
+extern void func_801485B8(s32 a0, s32 a1, s32 a2);
+extern void func_801484B0(s32 a0, s32 a1);
+extern s32 func_80154358(void *a0);
+extern void func_801484E8(s32 a0, s32 a1);
+extern void func_80148534(s32 a0, s32 a1);
+extern void func_8014856C(s32 a0, s32 a1);
+extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2);
+extern void func_80148634(void *a0);
+extern s32 func_80014DC0();
+extern s32 func_80014D68();
+extern s32 func_80014D94();
+extern s32 func_80014CF8();
+extern void func_800120DC();
+extern s32 func_800CF8B4();
+extern u16 func_801487F4(s32 *a0);
+extern u16 func_80148800(s32 *a0);
+extern u8 func_8014880C(s32 *a0);
+extern u16 func_80148818(s32 *a0);
+extern s32 func_80148824(void *arg0);
+extern s32 func_801488A8(u8 *a0);
+extern s32 func_8014891C(s32 a0);
+extern s32 func_80148980(u8 *a0);
+extern s32 func_801489E8(s32 a0);
+extern s32 func_80148A48(s32 a0);
+extern int func_80148AFC(void *a0);
+extern void func_80148AAC(u8 *a0);
+extern s32 func_80148C18(void);
+extern s32 func_80148C20(s32 a0, s16 a1);
+extern s32 func_80148C34(s32 a0, s32 a1);
+extern s32 func_80148C4C(s32 a0, s32 a1);
+extern s32 func_80148C64(s32 a0, s32 a1);
+extern s32 func_80148C7C(void);
+extern s32 func_80148C84(s32 a0, s32 a1);
+extern s32 func_80148C9C(s32 a0, s32 a1);
+extern s32 func_80148CB4(s32 a0, s32 a1);
+extern s32 func_80148CCC(s32 a0, s32 a1);
+extern s32 func_80148CE4(void);
+extern s32 func_80148CEC(void);
+extern s32 func_80148CF4(s32 a0, s32 a1);
+extern s32 func_80148D0C(s32 a0, s32 a1);
+extern s32 func_80148D24(void *a0, int a1);
+extern s32 func_80148D3C(void);
+extern s32 func_80148D44(void);
+extern s32 func_80148F60(void);
+extern s32 func_80148F68(s32 a0);
+extern s32 func_80148F74(s32 a0);
+extern s32 func_80148F80(s32 a0);
+extern s32 func_80148F8C(s32 a0);
+extern s32 func_80148F98(void);
+extern s32 func_80148FA0(s32 a0);
+extern s32 func_80148FAC(s32 a0);
+extern s32 func_80148FB8(s32 a0);
+extern s32 func_80148FC4(s32 a0);
+extern s32 func_80148FD0(void);
+extern s32 func_80148FD8(void);
+extern s32 func_80148FE0(s32 a0);
+extern s32 func_80148FEC(s32 a0);
+extern s32 func_80148FF8(s32 a0);
+extern s32 func_80149004(void);
+extern void func_8014900C(s32 *a0);
+extern void func_80149020(s32 *a0);
+extern void func_80149034(s32 *a0);
+extern void func_80149048(s32 *a0);
+extern void func_8014905C(u8 *a0);
+extern void func_801490E0(s32 *a0, s16 a1);
+extern void func_801490E8(s32 *a0, s16 a1);
+extern void func_801490F0(s32 *a0, s16 a1);
+extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_80012B04(s32 a0, s32 a1, s32 a2);
+extern void func_801490F8(s32 a0, s32 a1);
+extern s32 func_801491C4(s32 a0);
+extern s32 func_80149184(s32 a0);
+extern void func_80149204(s32 *a0);
+extern void func_80149210(s32 a0, s32 a1);
+extern s32 func_80149284(s32 *a0, s32 a1);
+extern void func_80149350(s32 arg0);
+extern void func_80149290(s32 a0);
+extern void func_80149374(s32 arg0, s32 arg1);
+extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3);
+extern void func_8014942C(s32 arg0);
+void func_8012F038(int param_1, short *param_2, short *param_3);
+extern void func_80149450(int param_1, short *param_2);
+extern void func_801494CC(int param_1, short *param_2, short *param_3);
+extern void func_80149544(s32 a0, s32 a1, s32 a2);
+void func_8012F14C(s32 a0, s32 a1, s32 a2);
+void func_8012EFB8(s32 a0);
+extern void func_80149584(s32 a0, s32 a1, s32 a2);
+extern void func_8014964C(s32 param_1, s32 param_2);
+extern void func_8012EF70(s32, s32);
+extern void func_801495C4(s32 a0, s32 a1);
+extern s32 func_801496D4(void *a0);
+extern void func_8015AD08();
+extern void func_80149704(void);
+extern void func_8015ACC4();
+extern void func_80149724(void);
+extern u8 D_80078EBF;
+extern s32 func_80149744(struct S_80149744 *a0);
+extern void func_8015F7A0();
+extern void func_80149788(void);
+extern u8 D_80078E78[];
+extern u8 D_80078EC1;
+extern s32 func_8014CB7C(void);
+extern s32 func_8014C088(s32 a0, s32 a1);
+extern u8 func_80165658(s32 a0, s32 a1);
+extern s32 func_801497A8(s32 *a0);
+extern void func_801653B8();
+extern void func_80149864(void);
+extern s32 func_8016F1AC(void);
+extern s32 func_80149884(void);
+extern void func_80160B00();
+extern void func_801498C0(void);
+extern s32 func_80149AA8(s32 *a0);
+extern s32 func_80149B54(s32 *a0);
+extern s32 func_801498E0(s32 *a0);
+extern s32 func_800CCF28(s32 a0);
+extern s32 func_80149954(s32 s0);
+extern s32 func_80149A64(s32 *a0);
+extern void func_8015DAC4(s32 *a0);
+extern void func_8015554C(s32 *a0);
+extern void func_80149AD4(s32 *a0);
+extern void func_80149B14(s32 *a0);
+extern u8 func_8014BEF8(void);
+extern s32 func_80149B54(s32 * arg0);
+extern void func_8015DE24(s32 *a0);
+extern void func_80157510(s32 *a0);
+extern void func_80149BAC(s32 *a0);
+extern s32 func_80029178(s32 a0);
+extern s32 func_80149C08(s32 arg0);
+extern void func_801577C8();
+extern void func_80149C94(void);
+extern void func_80157D20(void);
+extern void func_80149CB4(void);
+extern s32 func_80149CD4(s32 a0);
+extern u8 func_8014B5B8(s32 *a0);
+extern s32 func_80149D10(s32 a0);
+extern s32 func_80149E94(s32 a0);
+extern s32 func_80149DD8(s32 a0);
+extern s32 func_80149D9C(s32 a0);
+extern s32 func_80149F2C(s32 a0, s32 a1);
+extern s32 func_80149E94(s32 arg0);
+extern void func_801599A4(void *a0);
+extern void func_80159B3C(void *a0);
+extern void func_8016EDEC(s32, s32, s32);
+extern void func_80149FA8(void);
+extern s32 func_80149FB0(s32 a0);
+extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3);
+extern void func_8014A1B0(s32 a0, s32 a1);
+extern s32 func_8014A048(s32 param_1);
+extern u16 func_80156370(u16 a0);
+extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4);
+extern void func_8015D4B4();
+extern void func_8014A218(void);
+extern s32 func_8014C278(s32 a0, s32 a1, s32 a2);
+extern s32 func_8014C2B0(void *a0, void *a1, s32 a2);
+extern s32 func_8014A238(s32 arg0);
+extern s32 func_8014A2E4(s32 a0);
+extern void func_8014A380(s32 a0, s32 a1);
+extern s16 D_801152B0;
+extern s16 D_801152B4;
+extern s32 func_8014A3E0(struct S_8014A3E0 *a0);
+extern s32 func_8014A454(s32 a0);
+extern s32 func_8014A4B4(void *a0);
+extern void func_8015EDD4();
+extern void func_8014A4FC(void);
+extern int func_8014A51C(int param_1);
+extern s32 func_8014A674(s32 *a0);
+extern s32 func_8014A69C(s32 *a0);
+extern s32 func_8014A6C4(s32 a0);
+extern s32 func_8014A738(void *arg0);
+extern void func_8015E184();
+extern void func_8014A830(void);
+extern s32 func_80029AF4(void);
+extern s32 func_8014A850(s32 param_1);
+extern s32 func_80165A20(s32 a0);
+extern void func_8014AB7C();
+extern void func_8014AC10();
+extern void func_8014AA28(void);
+extern void func_8014AB5C(void);
+extern void func_80162CCC(void);
+extern void func_8014AB7C(s32 arg0);
+extern void func_8014ABF0(void);
+extern void func_8014AC10(s32 arg0);
+extern void func_8014ACC0(s32 a0, s32 a1);
+extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3);
+extern void func_8014ACE8(void *a0, s32 a1, s32 a2);
+extern void func_80146AFC(void *a0);
+extern void func_8014ADA8(s32 a0, s32 a1);
+extern void func_8014AD7C(s32 a0);
+extern s32 D_80078E8C;
+extern s32 func_8016F1C4(void);
+extern s32 func_8014B154(s32 *a0);
+extern void func_8014BD24(s32 a0, s32 a1);
+extern void func_8014BB24(s32 a0, s32 a1, s32 a2);
+extern void func_8014BC80(s32 a0, s32 a1);
+extern void func_8014BD60(s32 a0, s32 a1);
+extern void func_8014B084(void);
+extern void func_8014B034(s32 arg0);
+extern void func_8014B00C(s32 arg0);
+extern s16 D_80078E90;
+extern void func_8014B034(s32 a0);
+extern u16 D_80078EAC;
+extern u8 D_80078EBA;
+extern void func_800D10EC(void);
+extern void func_8002AC98(void);
+extern void func_8014B12C(void);
+extern void func_8014B2F8(void);
+extern void func_8014B4C4(void);
+extern void func_8014B160(s32 a0);
+extern s16 D_80078E96;
+extern s16 D_80078EB8;
+extern u16 D_80078EA6;
+extern void func_8014B2A8(void);
+extern void func_8014B310(void);
+extern void func_8014B2D0(void);
+extern s32 D_80078E94;
+extern s32 D_80078ECC;
+extern void func_8014B33C(void);
+extern u8 D_80062BF4[];
+extern s32 D_80078E98;
+extern void func_8014B4D4(void *a0);
+extern s16 D_80078E9A;
+extern u8 D_80126D1C;
+extern s32 D_80126D74;
+extern void func_8014B598(s32 a0, s32 a1);
+extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2);
+extern void func_8014B5D8(s32 s1);
+extern s32 D_80078E9C;
+extern s32 D_80078ED0;
+extern void func_8014B6F0(s32 a0, s32 a1);
+extern void func_8014B768(s32 a0, s32 a1);
+extern void func_8014B944(s32 a0, s32 a1, s32 a2);
+extern s32 D_80078EA4;
+extern u16 D_80078EB2;
+extern s16 D_80078EB4;
+extern void func_8014BB0C(void);
+extern void func_8014BC0C(s32 a0, s32 a1);
+extern void func_8014BC44(s32 a0, s32 a1);
+extern void func_8014BCC0(s32 a0, s32 a1);
+extern u16 D_80078EB6;
+extern s32 func_8014BCEC(s32 a0, s32 a1);
+extern void func_8014BD60(s32 param_1, s32 param_2);
+extern void func_8014BD98(s32 a0, u16 a1);
+extern void func_8014BDC8(void);
+extern void func_8014BDE0(void);
+extern s32 func_8017267C(s32 *a0);
+extern void func_80029ED4(s32 a0);
+extern void func_8014BE78(void);
+extern void func_8014BE9C(void);
+extern void func_80029124(s32 a0, s32 a1);
+extern void func_8014BEC0(void);
+extern void func_8014BF18(s32 a0);
+extern void func_8014BF48(void);
+extern u8 func_8014BF6C(void);
+extern void func_8014BF8C(u8 arg0);
+extern void func_8014BFB0(void);
+extern u8 func_8014BFD4(void);
+extern void func_8014BFF4(s32 a0, s32 a1);
+extern void func_8014C010(s32 a0, s32 a1);
+extern s32 func_8014C050(s32 a0, s32 a1);
+extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2);
+extern s32 func_8014C118(void * a0, s32 a1, s32 a2);
+extern s32 func_8014C168(s32 * param_1, s32 param_2);
+extern void func_8014C1C8(s32 a0, s32 a1, void* a2);
+extern s32 func_80013328(s32 a0, s32 a1);
+extern s32 func_8014C59C(void *a0, void *a1);
+extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5);
+extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4);
+extern s32 aF8014C4AC();
+extern s32 func_8014C568(s16 *a0, s16 *a1);
+extern s32 ratan2(s32 dx, s32 dy);
+extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2);
+extern s16 func_8014C5D0(s32 a0, s32 a1);
+extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2);
+extern u8 D_80126D17;
+extern void func_8014C6AC(void);
+extern void func_8014C6C0(void);
+extern u8 D_80126D1E;
+extern void func_8014C6D0(void);
+extern void func_8014C6E0(void);
+extern void func_8014C6F4(u8 *a);
+extern s32 func_8014C860(s32 a0, s32 a1);
+extern void func_8014C8C8(s32 a0, s32 *a1);
+extern void func_8014C88C(s32 a0);
+extern void func_8014C8C8(s32 dst, s32 * src);
+extern void func_8014C8F0(s32 arg0);
+extern u8 D_801151F0[];
+extern s32 func_8014C918(s32 a0, s32 a1);
+extern s32 D_80126B50;
+extern void func_8014C968(void);
+extern s32 func_8014C98C(void);
+extern void func_80139914(s32 a0);
+extern s32 func_8014CA00(s32 a0);
+extern u16 func_8014CA70(s32 a0, s32 a1);
+extern s32 func_8014CA14(s32 a0, s32 a1);
+extern u16 func_8014CAE4(s32 *a0, s32 a1);
+extern s32 func_8014CA88(s32 *a0, s32 a1);
+extern s32 D_80126B9C;
+extern s32 func_8014CAFC(void);
+extern s32 func_8014CB0C(void);
+extern s32 func_8014CB1C(void);
+extern u8 D_80126D1F;
+extern s32 func_8014CB2C(void);
+extern s32 func_8014CB58(void);
+extern u8 D_80126D1D;
+extern void func_8014CB68(void);
+extern s32 func_8014CB8C(void);
+extern struct Packed8 D_80126C98;
+extern short D_80126C9E;
+extern void func_8014CB9C(struct Packed8 *a0);
+extern s32 D_80126CDC;
+extern void func_8014CBD8(void);
+extern void func_8014CBE8(void);
+extern void func_8014CBF8(void *a0);
+extern void func_8014D3E0(s32 a0);
+extern void func_8014D04C(void);
+extern void func_8014CCB4(void);
+extern void func_8014CC28(s32 a0);
+extern void func_8014CD0C(u8 *a0);
+extern s32 func_8014CF04(s32 a0, s32 a1, void *a2);
+extern int func_8014CD80(s32 a0, u16 *a1, u16 *a2);
+extern int func_80135A4C();
+extern int func_80135888();
+extern int func_8014C918();
+extern int func_8014CD80(int param_1, unsigned short *param_2, unsigned short *param_3);
+extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2);
+extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3);
+extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3);
+extern void func_8014D0A4(s32);
+extern s32 func_8014D2A0(s32 a0, void *a1, void *a2);
+extern s32 func_8014D12C();
+extern void func_8014D0A4(s32 a0);
+extern s32 func_8014D12C(s32 arg0, void *a1, void *a2);
+extern s32 func_8014D2A0(s32 arg0, void *a1, void *a2);
+extern s32 func_8014D610(s32 a0, s32 a1, u16 *a2);
+extern s32 func_8014D4C0(s32 a0, void *a1, void *a2);
+extern void func_8014D438(s32 a0);
+s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3);
+s32 func_8014C918(s32 a0, s32 a1);
+extern s32 func_8014D610(s32 a0, s32 a1, u16* a2);
+extern void func_8014D790(s32);
+extern void func_8014D738(void);
+extern s32 func_8014DD8C(s32 a0, void *a1, void *a2);
+extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2);
+extern void func_8014D790(s32 a0);
+extern void func_800139C8(s32 a0, void *a1, void *a2);
+extern s32 func_8014DCE0(s32 a0, s32 a1, s32 a2);
+extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2x);
+extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2);
+extern void func_8014DF94(s32);
+extern void func_8014DF3C(void);
+extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */
+extern void func_8014DF94(s32 arg0);
+extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */
+extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3);
+extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); /* canonical (engine_core.h:11555) */
+extern s32 func_8014E284(s32 a0, s16 *arg1, s16 *arg2);
+extern void func_8014E48C(s32);
+extern void func_8014E434(void);
+extern void func_8014E5B4(s32 a0, void *a1, void *a2);
+extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2);
+extern void func_8014E48C(s32 a0);
+extern s32 aF8014E5B4();
+extern void func_8014E6F8(struct SubE6F8*);
+extern void func_8014E6A0(void);
+extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2);
+extern void func_8014E6F8(struct SubE6F8 *a0);
+extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3);
+extern s32 func_8014E98C(void *a0);
+extern u16 D_800B99DA;
+extern s32 D_801150D8;
+extern s16 D_80126724;
+extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014ED80(struct SubED80 *a0);
+extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014F24C(struct SubF24C*);
+extern void func_8014F1F4(void);
+extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014F24C(struct SubF24C *a0);
+extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014F468(void);
+extern int func_8014F6F4(void);
+extern s32 func_8014F3E8(s32 param_1);
+extern int func_8014F74C();
+extern s32 D_801152BC;
+extern s32 func_8014F4C0(s32 arg0);
+extern int func_8014F74C(s32 arg0);
+extern s32 func_8014FA70(s32 a0);
+extern void func_8014FA04(s32 a0);
+extern s32 func_8014FC18(u8*);
+extern void func_8014FBC0(void);
+extern s32 func_8014FC18(u8 *self);
+extern int func_8014FD54(int);
+extern void func_8014FCFC(void);
+extern int func_8014FD54(int param_1);
+extern s32 func_80150170(void *a0);
+extern s32 func_8014FE60();
+extern s32 func_8014FE60(void *e);
+extern s32 func_80135D20(s32 a0, s32 a1, void *a2);
+extern s32 func_8014FFDC(s32 e, void *a1, void *a2);
+extern s32 func_80150150(s32 a, s32 b);
+extern s32 func_801502EC(s32 e, void *a1, void *a2);
+extern s32 func_80150460(s32 e, s32 a1);
+extern s32 func_80150170(void *e);
+extern s32 func_80150460(s32 a, s32 b);
+extern s32 func_80150528(void *a0, void *a1, void *a2);
+extern void func_801504D8(u16 *a0);
+extern s32 func_80150528(void *arg0, void *arg1, void *arg2);
+extern s32 func_801506A4();
+extern void func_80147324(s32 a0);
+extern s32 func_801506A4(s32 arg0, s32 arg1);
+extern void func_80150820(s32 a0, s32 a1);
+extern void func_8015086C(int param_1);
+extern s32 func_801508B4(s32 a0);
+extern s32 func_8015094C(s32 a0);
+extern s32 func_80021174(s32 a0, s32 a1);
+extern s32 func_8015094C(s32 param_1);
+extern void func_80150B28(int param_1);
+extern void func_80150B9C(void);
+extern s32 func_80151184(s32 a0, s32 a1, s32 a2);
+extern s32 func_80150BA4(s32 a0);
+extern s32 func_801619D0(void *a0);
+extern void func_80150BC8(s32 *a0);
+extern s32 func_80150480(s32 a0);
+extern u16 D_800AE6DC;
+extern void func_80150C48(s32 a0);
+extern int func_80151184(int arg, int a1, int a2);
+extern int func_80150CA0(int arg);
+extern void func_80150EC4(s32 a, s32 b);
+extern void func_80150CC4(s32 a);
+extern void func_80150CE4(s32 a);
+extern void func_80150D04(s32 a);
+extern void func_80150D24(s32 a);
+extern void func_80150D44(s32 a);
+extern void func_80150D64(s32 a);
+extern void func_80150D84(s32 a);
+extern void func_80150DA4(s32 a);
+extern void func_80150DC4(s32 a);
+extern void func_80150DE4(s32 a);
+extern void func_80150E04(s32 a);
+extern void func_80150E24(s32 a);
+extern void func_80150E44(s32 a);
+extern void func_80150EC4(s32 a0, s32 a1);
+extern void func_80150E64(s32 a0);
+extern void func_80150E84(s32 a0);
+extern void func_80150EA4(s32 a0);
+extern u8 D_800AE6C0;
+extern s16 D_800AE6C8;
+extern s16 D_800AE6CA;
+extern s16 D_800AE6CC;
+extern s32 D_800AE6C4;
+extern s16 D_800AE6CE;
+extern u8 D_800AE6BE;
+extern u8 D_801201F8[];
+extern void func_80150F78(void);
+extern void func_80150F80(s32 a0);
+extern int func_80150FB4(int arg);
+extern void func_80150FD8(s32 a0);
+extern int func_80151014(int arg);
+extern void func_80151038(s32 a0);
+extern int func_80151070(int arg);
+extern int func_80151094(int arg);
+extern void func_801510B8(void);
+extern void func_801510C0(void);
+extern int func_801510C8(int arg);
+extern int func_801510EC(int arg);
+extern s32 func_80151110(void);
+extern void func_80151130(void);
+extern int func_80151138(int arg);
+extern void func_8015115C(s32 *a0, s16 a1);
+extern s32 func_80151164(s32 a0, s32 a1);
+extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2);
+extern void func_801511A8(u8 *a0);
+extern void func_801511C4(u8 *a0);
+extern int func_80151204(int arg, int a1);
+extern int func_801511E0(int arg);
+extern int func_80151204(int a0, int a1);
+extern void func_80151238(void *a0);
+extern void func_8015126C(u16 *p);
+extern void func_80151664(void);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553C0(s32 a0);
+extern void func_80153C18(); /* fleet canon: K&R empty prototype (engine_core.h:75, :1682 defines it (void));
+extern * a prototyped (s32) decl is `conflicting types` in this TU. Arg still * passes in $a0 under default promotions -> codegen unchanged. */ void func_80151664(void);
+extern void func_80151780(s32 a0);
+extern void func_801516F0(s32 *a0);
+extern void func_8015173C(s32 *a0);
+extern s16 D_8011DB1A;
+extern s32 D_80127518;
+extern s32 D_801151FC;
+extern s32 func_801725CC(u8 *a0);
+extern s32 func_80029D3C(void);
+extern void func_80151878(void);
+extern void func_80153B58(s32 *a0);
+extern s32 func_80151880(s32 a0);
+extern s32 func_801518D8(s32 a0);
+extern void func_80151944(void *a0);
+extern s32 func_80151924(void);
+extern void func_8014E934(s32 a0);
+extern s32 func_8014F3E8(s32 a0);
+extern void func_801519C8(s32 a0);
+extern void func_80151980(s32 a0);
+extern M2C_UNK D_800D5880;
+extern s32 D_800D58AC;
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_801519C8(s32 arg0);
+extern void func_80151C54(s32 a0);
+extern void func_801542DC(s32 *a0, s32 a1);
+extern void func_8015BDD0(s32 *a0);
+extern void func_80165718(s32 a0);
+extern u8 D_800D46E4[];
+extern void func_80151AE4(s32 arg0);
+extern s32 func_801535F4(void *arg0);
+extern void func_8015BF48(s32 *a0);
+extern void func_80151B98(int param_1);
+extern void func_80153C18();
+extern void func_80151D24(void *a0);
+extern void func_80151DB0(s32 a0);
+extern void func_80151D60(void *a0);
+extern s32 func_80172630(u8 *a0);
+extern s32 D_80062C14;
+extern void func_80151DB0(s32 param_1);
+extern void func_80151E78(s32 *a0);
+extern void func_80151ECC(struct S80151ECC *a0);
+extern void func_80151FB4(s32 a0);
+extern void func_80151F38(s32 *a0);
+extern void func_80152058(void *a0);
+extern void func_801520DC(s32 a0);
+extern void func_80152094(s32 a0);
+extern void func_801520DC(s32 arg0);
+extern void func_801470B4(s32 a0);
+extern void func_8015369C(s32 a0);
+extern void func_80152194(s32 *a0);
+extern s32 func_801536DC(s32 a0);
+extern void func_8015220C(s32 a0);
+extern s32 func_80153800(s32 a0);
+extern void func_801522CC(s32 a0);
+extern void func_80152254(s32 *a0);
+extern void func_80152370(void *a0);
+extern void func_801523F4(s32 a0);
+extern void func_801523AC(s32 a0);
+extern void func_8001382C(s32 a0, void *a1, void *a2);
+extern void func_801523F4(s32 arg0);
+extern void func_801525F4(int);
+extern void func_80152500(int param_1);
+extern void func_801525F4(s32 a0);
+extern void func_80152698(void *a0);
+extern void func_80152714(s32 a0);
+extern void func_801526D4(s32 a0);
+extern void func_80152790(s32 a0);
+extern void func_8015282C(void *a0);
+extern void func_801528B0(s32 a0);
+extern void func_80152868(s32 a0);
+extern void func_801528B0(s32 arg0);
+extern void func_8015294C(s32 a0);
+extern void func_80152A08(s32 a0);
+extern void func_80152AC8(s32 a0);
+extern void func_80152A50(s32 *a0);
+extern void func_80152B6C(void *a0);
+extern void func_80152BF0(s32 a0);
+extern void func_80152BA8(s32 a0);
+extern void func_80152C80(s32 *a0);
+extern void func_80152C40(s32 *a0);
+extern void func_80152C80(s32* a0);
+extern void func_80152D24(void *a0);
+extern void func_80152DA8(s32 a0);
+extern void func_80152D60(s32 a0);
+extern void func_80152DA8(s32 arg0);
+extern void func_80152E4C(s32 a0);
+extern void func_80152EFC(s32 a0);
+extern void func_80152FBC(s32 a0);
+extern void func_80152F44(s32 *a0);
+extern void func_80153060(void *a0);
+extern void func_801530E4(s32 a0);
+extern void func_8015309C(s32 a0);
+extern void func_80155440(s32 *a0);
+extern u8 D_80062C04[];
+extern void func_801530E4(s32 arg0);
+extern void func_80153150(struct S80153150 *a0);
+extern void func_801531BC(s32 a0);
+extern void func_8015327C(s32 a0);
+extern void func_80153204(s32 *a0);
+extern void func_80153320(void *a0);
+extern void func_801533A4(s32 a0);
+extern void func_8015335C(s32 a0);
+extern void func_80153410(s32 *a0);
+extern void func_80153490(s32 a0);
+extern void func_80153550(s32 a0);
+extern void func_801534D8(s32 *a0);
+extern void func_8014ED28(s32 a0);
+extern void (*D_8011DB28)(s32 a0);
+extern s32 func_801536DC(s32 param_1);
+extern s32 func_80153978(s32 a0, u16 *src);
+extern s32 func_80133784(s32 a0, void *src, s32 dst);
+extern s32 func_801539F8(s32 a0, void *a1);
+extern s32 func_8016DA04(s32 a0);
+extern s32 func_80153BD8(s32 a0);
+extern s32 func_80153BF0(s32 a0);
+extern void func_80153C18(void);
+extern u16 D_8011F748;
+extern void func_80153C30(void);
+extern void func_80153C74(s16 a0, s16 a1);
+extern s16 D_8011DB18;
+extern void func_80153C44(int a0, int a1, s16 a2);
+extern s16 D_8011DB0C;
+extern s32 D_80115210;
+extern void func_80153C8C(void);
+extern void func_80153C9C(void);
+extern s32 func_80153CBC(void);
+extern void func_80153CCC(S80153CCC *a0);
+extern void func_80153D7C(s32 a0);
+extern void func_80153D34(s32 a0);
+extern void func_80153D7C(s32 param_1);
+extern void func_8015410C(void);
+extern void func_80153E00(s32 param_1);
+extern void func_80154134(u8 *a0);
+extern void func_80154190(u8 *a0, s32 a1);
+extern void func_80154150(s32 a0, s32 a1);
+extern void func_80154218(u8 *a0, s32 a1, s32 a2);
+extern void func_801541D8(u8 *a0, s32 a1, s32 a2);
+extern s32 func_801549F8(s32 a0, s32 a1, s32 a2);
+extern void func_801542A4();
+extern void func_801542A4(s32 *a0, s32 a1);
+extern void func_8015430C();
+extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2);
+extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3);
+extern s32 func_80154358(void * arg0);
+extern void func_80154AB4(s32 a0, s32 a1);
+extern void func_80154B20(s32 a0, s32 a1, s32 a2);
+extern void func_80154AE0(s32 a0, s32 a1, s32 a2);
+extern void func_80154B7C(u8 *a0, s32 a1);
+extern void func_80154B4C(u8 *a0, s32 a1);
+extern void func_80154BC8(void *a0, s32 a1, s32 a2);
+extern void func_80154B98(void *a0, s32 a1, s32 a2);
+extern u8 D_800D8D10[];
+extern s16 D_80078E9E;
+extern void func_801550FC(s32 a0);
+extern void func_80154ED8(s32 a0, s32 a1);
+extern void func_80154F9C(s32 a0);
+extern void func_801550FC(s32 arg0);
+extern void func_8001D150(s32, s32);
+extern void func_8001D130(int, int);
+extern void func_80155150(int param_1);
+extern s32 D_800DE2A4[];
+extern void func_801552F4(s32 a0);
+extern void func_80155344(s32 a0);
+extern s32 func_80155394(s32 *a0);
+extern void func_801553A8(s32 *a0);
+extern s32 func_80155458(s32 param_1);
+extern s32 func_801659DC(u8 *a0);
+extern s32 func_801554B8(void *arg0);
+extern void func_801555F4(void *a0);
+extern void func_80155518(s32 *a0);
+extern void func_80155580(void *a0);
+extern s32 func_80161104(void);
+extern void func_801555F4(void *);
+extern void func_801555BC(void *a0);
+/* ==== end §8b carried decl layer ==== */
+
+
+extern s32 D_8011F730;
+extern s32 func_80029178(s32 arg);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146CA0(void *a0);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern void func_80147300(u16 arg0);
+extern void func_80147324(s32 a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553A8(s32 *a0);
+
+
+
+void func_801555F4(void *param_1)
+{
+ extern void func_80156648(int *a0);
+ extern int D_800D4C94;
+ extern int D_800D4CE4;
+ extern int D_800D4D38;
+ extern int D_800D4D88;
+ extern int D_800D4E10;
+ extern int D_800D4E6C;
+
+
+ int uVar1;
+ unsigned char bVar3;
+ int s1;
+ unsigned short uVar4;
+
+ ((void(*)(int, int))func_80154A74)(((int)param_1), 0x15);
+ if ((*(unsigned int *)(((int)param_1) + 0x44) & 0x200) == 0) {
+ if (*(int *)(((int)param_1) + 0x2c) == -0xb0000) {
+ uVar1 = ((int(*)(int))func_80029178)(0x82);
+ if ((uVar1 & 0xff) != 0) {
+ uVar1 = 7;
+ goto L_648;
+ }
+ }
+ } else {
+ uVar1 = 5;
+L_648:
+ *(unsigned char *)(((int)param_1) + 0x1aa) = uVar1;
+ }
+ switch (*(unsigned char *)(((int)param_1) + 0x1aa)) {
+ case 0:
+ case 1:
+ bVar3 = *(unsigned char *)(((int)param_1) + 0x1ab) ^ 1;
+ *(unsigned char *)(((int)param_1) + 0x1ab) = bVar3;
+ if (bVar3 != 0)
+ *(unsigned char *)(((int)param_1) + 0x1aa) = 0;
+ else
+ *(unsigned char *)(((int)param_1) + 0x1aa) = 1;
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4C94);
+ ((void(*)(int))func_80147324)(0x400);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 0;
+ D_8011F730 |= 3;
+ func_80146CA0((void *)((int)param_1));
+ goto L_7b8;
+ case 2:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4CE4);
+ ((void(*)(int))func_80147324)(0x446);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 1;
+ goto L_575c;
+ case 3:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4D38);
+ ((void(*)(int))func_80147324)(0x400);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 2;
+ goto L_575c;
+ case 4:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4D88);
+ ((void(*)(unsigned short))func_80147300)(0x5f6);
+ s1 = 3;
+ func_80146CA0((void *)((int)param_1));
+L_575c:
+ func_80146CA0((void *)((int)param_1));
+ goto L_7b8;
+ case 5:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4E10);
+ s1 = 4;
+ uVar4 = 7;
+ goto L_7b0;
+ case 7:
+ ((void(*)(int))func_80147324)(0x7f);
+ ((void(*)(unsigned short))func_80147300)(0x5f4);
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4E6C);
+ s1 = 6;
+ uVar4 = 8;
+L_7b0:
+ *(unsigned short *)(((int)param_1) + 2) = uVar4;
+ goto L_7b8;
+ default:
+ ;
+ }
+L_7b8:
+ ((void(*)(int *, int))func_80146E90)((int *)((int)param_1), 0);
+ func_80156648((int *)((int)param_1));
+ if (s1 >= 0) {
+ ((int(*)(int, int, int, int))func_80146994)(4, ((int)param_1), s1, 0);
+ }
+ ((void(*)(int *))func_801553A8)((int *)((int)param_1));
+}
+
+DEFINE_func_80155800() /* dedup: shared engine-core @0x80155800 (src/shared) */
+
+
+DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155a44 (src/shared) */
+
+
+DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155b20 (src/shared) */
+
+
+DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155b9c (src/shared) */
+
+
+DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155c0c (src/shared) */
+
+
+DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155c64 (src/shared) */
+
+
+DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155d70 (src/shared) */
+
+
+DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155e30 (src/shared) */
+
+
+DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155ea4 (src/shared) */
+
+
+void func_80155F58(void) {
+}
+
+DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155f60 (src/shared) */
+
+
+DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155f80 (src/shared) */
+
+
+DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155fb0 (src/shared) */
+
+
+DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155fd4 (src/shared) */
+
+
+DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155ff8 (src/shared) */
+
+
+
+void func_80156044(int param_1, int param_2)
+{
+ extern u32 func_8015616C(s32 a0, u16 a1);
+ extern void func_80156670(s32, s32, s32, s32, s32, u16);
+ extern void func_801567BC(s32 a0);
+ extern void func_80156848(s32, s32);
+ extern void func_80156A88(s32 a0, s32 a1);
+ extern s32 func_801565C0(void);
+ extern u8 D_80185C34;
+ extern u8 D_80185C48;
+ extern u8 D_80185ACC;
+
+ register s32 puVar2 __asm__("$2");
+ register s32 iVar3 __asm__("$3");
+ u8 *puVar4;
+ s32 uVar1;
+
+ if (((u32)param_2) & 0x10000) {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_80185C34;
+ } else if (((u32)param_2) & 0x20000) {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_80185C48;
+ } else {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_80185ACC;
+ }
+ puVar4 = (u8 *)(iVar3 + puVar2);
+ uVar1 = func_8015616C(((s32)param_1), *(u16 *)puVar4) & 0xffff;
+ if (*(u8 *)(((s32)param_1) + 0x1a8) != 0) {
+ ((void (*)(s32, s32, s32, s32, s32, s32))func_80156670)(((s32)param_1), *(s32 *)puVar4, uVar1, *(s32 *)(puVar4 + 4),
+ *(u8 *)(puVar4 + 0xA), *(u16 *)(puVar4 + 0x12));
+ if (*(u8 *)(puVar4 + 0x10) != 0) {
+ func_801567BC(((s32)param_1));
+ }
+ ((void (*)(s32, s32, s32))func_80156848)(((s32)param_1), (s32)puVar4, uVar1);
+ func_80156A88(((s32)param_1), (s32)puVar4);
+ if (((s32 (*)(s32))func_801565C0)(((s32)param_1)) != 0) {
+ *(u8 *)(((s32)param_1) + 0x1c0) = 1;
+ }
+ }
+}
+
+
+DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616c (src/shared) */
+
+
+DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */
+
+
+
+
+S801563EC *func_801563EC(u16 idx) {
+
+ extern S801563EC D_80185C70[];
+ return &D_80185C70[idx];
+}
+
+
+DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640c (src/shared) */
+
+
+DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564b0 (src/shared) */
+
+
+DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565c0 (src/shared) */
+
+
+DEFINE_func_80156600() /* dedup: shared engine-core @0x80156600 (src/shared) */
+
+
+DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */
+
+
+
+DEFINE_func_80156670() /* dedup: shared engine-core @0x80156670 (src/shared) */
+
+
+DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567bc (src/shared) */
+
+
+DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */
+
+
+DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156a14 (src/shared) */
+
+
+
+// @class: struct
+// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185EE0 indexed halfword folds %lo
+extern void func_80147324(s32 arg0);
+
+void func_80156A1C(s32 param_1, s32 param_2)
+{
+
+ extern unsigned char D_8011520C[];
+ extern unsigned short D_80185EE0[];
+ if (*(unsigned char *)(param_1 + 0xDA) == 0) {
+ func_80147324(D_80185EE0[D_8011520C[param_2]]);
+ *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1;
+ }
+}
+
+
+DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156a88 (src/shared) */
+
+
+DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156b74 (src/shared) */
+
+
+DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ecc (src/shared) */
+
+
+DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156fa8 (src/shared) */
+
+
+DEFINE_func_80157158() /* dedup: shared engine-core @0x80157158 (src/shared) */
+
+
+DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571c4 (src/shared) */
+
+
+DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574dc (src/shared) */
+
+
+DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */
+
+
+
+
+void func_80157544(void *a0) {
+
+ extern void (*D_80185EF0[])(void);
+ D_80185EF0[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */
+
+
+DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575e4 (src/shared) */
+
+
+DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576a8 (src/shared) */
+
+
+DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771c (src/shared) */
+
+
+DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773c (src/shared) */
+
+
+void func_80147078(s32 *a0, s16 a1);
+void func_801578C0(s32 a0);
+
+void func_80157788(s32 *a0)
+{
+ /* [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_801C8578;
+ D_801C8578 = 0x12C;
+ func_80147078(a0, 7);
+ func_801578C0((s32)a0);
+}
+
+
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80157808(s32 *a0);
+
+void func_801577C8(s32 *param_1)
+{
+ /* [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_801C8578;
+ D_801C8578 = 0x12C;
+ func_80147078(param_1, 7);
+ func_80157808(param_1);
+}
+
+
+INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_801555F4", func_80157808);
+
+DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274
+
+extern void func_80156648(s32 *a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_80147324(s32 arg0);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146CA0(void *a0);
+extern s32 func_801725A4(u8 *a0);
+
+void func_801578C0(s32 param_1)
+{
+
+ extern u8 D_800D5128;
+ extern u8 D_80185EF8;
+ ((void (*)(void))func_80156648)();
+ *(u8 *)(param_1 + 0x1AA) = 9;
+ func_80154274((s32 *)param_1, (s32)&D_800D5128);
+ ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15);
+ func_80147324(0xC20);
+ ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185EF8);
+ ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0);
+ ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0);
+ ((void (*)(s32 *))func_80146CA0)((s32 *)param_1);
+ ((void (*)(s32 *))func_801725A4)((s32 *)param_1);
+}
+
+
+
+// @class: other
+// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only
+// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves
+// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT
+// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16
+// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH.
+
+extern void func_80147A10(int a0, int a1);
+extern void func_80147A84(int);
+extern void func_801473EC(s32 *a0);
+extern void func_80148038(int, int);
+extern void func_80147460(int);
+extern void func_8014ED28(s32 _arg0);
+extern void func_80146D90(int);
+extern void func_80161450(void *a0);
+extern void func_80157A8C(int);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern void func_80146CA0(void *a0);
+extern int func_80155FF8(int arg, int a1);
+extern void func_80154A74(int, int);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern s32 func_801725A4(u8 *a0);
+
+
+void func_8015795C(int param_1)
+{
+
+ extern unsigned char D_800D5178;
+ extern unsigned char D_80185F08;
+ int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */
+ int iVar1;
+ unsigned int uVar2;
+
+ *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2;
+ ((int (*)(int, int))func_80147A10)(param_1, 0x400);
+ if (*(int *)(param_1 + 0x2c) >= 0) {
+ *(int *)(param_1 + 0x2c) = 0;
+ }
+ func_80147A84(param_1);
+ ((void (*)(int))func_801473EC)(param_1);
+ func_80148038(param_1, 0x1a000);
+ func_80147460(param_1);
+ iVar1 = ((int (*)(int))func_8014ED28)(param_1);
+ if (iVar1 != 0) {
+ func_80146D90(param_1);
+ }
+ uVar2 = ((int (*)(int))func_80161450)(param_1);
+ if ((uVar2 & 5) != 0) {
+ func_80157A8C(param_1);
+ ((void (*)(int, int))func_80146E90)(param_1, 8);
+ ((void (*)(int))func_80146CA0)(param_1);
+ }
+ if (uVar2 == 0) {
+ ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa));
+ if (*(unsigned char *)(param_1 + 0x1c0) != 0) {
+ func_80154A74(param_1, 0x17);
+ ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178);
+ ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185F08);
+ ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000);
+ *(short *)(param_1 + 2) = 4;
+ }
+ ((void (*)(int))func_801725A4)(param_1);
+ }
+ return;
+}
+
+
+DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157a8c (src/shared) */
+
+
+DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157ac8 (src/shared) */
+
+
+DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157b74 (src/shared) */
+
+
+DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157bc8 (src/shared) */
+
+
+DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157ccc (src/shared) */
+
+
+
+/* func_80157D20 — 21-ins plumbing shim (×138 overlays).
+ *
+ * §71 sibling-first: the immediate neighbour func_801578C0 in this very TU
+ * (src/ov_SC01_077/ov_SC01_077_jr_80154C24.c L1592) already matches with
+ * `((void (*)(void))func_80156648)();` — the zero-argument call form. The
+ * target likewise sets up NO argument registers before `jal func_80156648`
+ * ($a0/$a1 still carry this function's own incoming args), so the call is
+ * argument-less here too.
+ *
+ * The `lhu %lo(D_80185F48)($at)` with `sll $s0,$s0,1` => a plain u16 array
+ * indexed by the second parameter, NOT hoisted into a pointer (§20: a pointer
+ * var would keep one address register live across the call; the target rebuilds
+ * the %hi/%lo pair inline after the call returns).
+ *
+ * §73 PARAMS axis / §42 lever 6 — the fleet canon for this symbol is
+ * `extern void func_80157D20(void);` (this TU's carried decl layer, L399, and
+ * every sibling overlay's). A 2-param definition hard-errors with
+ * `conflicting types` in the real TU (rtu_match, byte-verified), and the canon
+ * cannot be widened from a draft (that is an R22 fleet edit). So keep the
+ * `(void)` signature and capture $a0/$a1 with register pins copied into NORMAL
+ * pseudos — the copies are live across `jal func_80156648`, so they get the
+ * callee-saved homes the target uses ($s1 = a0, $s0 = a1). A direct
+ * `register` use would leave the values in call-clobbered $a0/$a1.
+ */
+
+extern void func_80156648(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80157D74(u16 *a0);
+
+void func_80157D20(void)
+{
+
+ extern u16 D_80185F48[];
+ register void *a0v __asm__("$4");
+ register s32 a1v __asm__("$5");
+ void *param_1 = a0v;
+ s32 param_2 = a1v;
+
+ ((void (*)(void))func_80156648)();
+ ((void (*)(void *, s32))func_80147078)(param_1, D_80185F48[param_2]);
+ ((void (*)(void *))func_80157D74)(param_1);
+}
+
+
+DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157d74 (src/shared) */
+
+
+
+
+void func_80157DC4(void *a0) {
+
+ extern void (*D_80185F58[])(void);
+ D_80185F58[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157e00 (src/shared) */
+
+
+DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157e38 (src/shared) */
+
+
+DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157ea4 (src/shared) */
+
+
+DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157f64 (src/shared) */
+
+
+
+
+void func_80157FC4(void *a0) {
+
+ extern void (*D_80185F60[])(void);
+ D_80185F60[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots
+
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147324(s32 arg0);
+extern void func_80146CA0(void *a0);
+
+
+void func_80158038(void * param)
+{
+
+ extern s32 D_800D51E0;
+ extern s32 D_80185F2C;
+ *(u8 *)(param + 0x1aa) = 0xe;
+ func_80154274((s32 *)param, (s32)&D_800D51E0);
+ func_80154A74(param, 0x15);
+ func_80146DB8((s32 *)param, &D_80185F2C);
+ *(s32 *)(param + 0x234) = 0;
+ func_80146994(5, param, 0xc, 0);
+ func_80147324(0x455);
+ func_80146CA0((void *)param);
+}
+
+
+DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580b4 (src/shared) */
+
+
+DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581ac (src/shared) */
+
+
+
+
+void func_8015824C(void *a0) {
+
+ extern void (*D_80185F6C[])(void);
+ D_80185F6C[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */
+
+
+DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582c0 (src/shared) */
+
+
+DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */
+
+
+
+// @class: other
+// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code)
+
+extern void func_8014CBF8(void *a0);
+extern void func_801474EC(s32 *a0);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80148038(s32 a0, s32 a1);
+extern void func_80147460(s32 a0);
+extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_801473EC(s32 *a0);
+extern s32 func_801615C4(void *a0, s32 a1);
+extern s32 func_80146E98(s32 a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80146CA0(void *a0);
+extern int func_80155FF8(int arg, int a1);
+
+
+void func_80158434(s32 param_1)
+{
+
+ extern u8 D_80185F3C;
+ extern u8 D_800D533C;
+ u32 uVar1;
+ u32 uVar2;
+ s32 frame_pad[4];
+ (void)&frame_pad;
+
+ *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2;
+ if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) {
+ *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1;
+ ((s32 (*)(void))func_8014CBF8)();
+ ((void (*)(s32))func_801474EC)(param_1);
+ ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000);
+ ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185F3C);
+ }
+ if (*(s32 *)(param_1 + 0x234) != 0) {
+ func_80148038(param_1, 0x10000);
+ func_80147460(param_1);
+ func_80147AD4(param_1, 0, 0, 0);
+ ((void (*)(s32))func_801473EC)(param_1);
+ }
+ uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0);
+ if (uVar1 != 0) {
+ if (uVar1 == 1) goto LAB_80158508;
+ uVar2 = uVar1 & 0x2000;
+ } else {
+ uVar2 = func_80146E98(param_1);
+ }
+ if (uVar2 == 0) goto LAB_80158528;
+LAB_80158508:
+ ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C);
+ ((void (*)(s32))func_80146CA0)(param_1);
+ return;
+LAB_80158528:
+ ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA));
+}
+
+
+DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */
+
+
+DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585a4 (src/shared) */
+
+
+DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585ac (src/shared) */
+
+
+DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585ec (src/shared) */
+
+
+
+// @class: loose-typing
+// @stuck: none — MATCH (87 ins, match_one) + symcheck SYMS-OK (17 symbols agree); same file also
+// MATCHes verbatim against ov_SC03_099 and ov_SC06_008 (sibling asm bodies are identical)
+
+/* func_80158638 @ 0x80158638 — ov_SC01_077 / ov_SC01_077_jr_80154C24 (87 ins).
+ *
+ * TWO decl-ROBUSTNESS choices in the BODY, deliberate — these are the only two things the gate's
+ * decl ladder (cast_call_sites/reconcile_tu/sig_unify) CANNOT repair, because they change codegen,
+ * not plumbing. Both are load-bearing for templating this exemplar onto its 138 h_seq siblings,
+ * where each overlay TU carries its own spelling of these decls:
+ *
+ * 1) `*(u16 *)&D_80078EB4` — the target loads it with `lhu`. The ov_SC01_077 TU already carries
+ * `extern s16 D_80078EB4;` (line 504), and a plain `D_80078EB4 != 0` read through an s16 decl
+ * compiles to `lh` => WIDTH/lh!=lhu, closeness 1. A `(u16)` cast does NOT fix it (gcc-2.7.2
+ * folds the zero_extend away for a !=0 test and keeps `lh`); the pointer pun does, and it is
+ * correct under EITHER declared signedness.
+ * 2) `(s16)func_80159464(...)` with the fleet-canonical `extern s32 func_80159464();` decl.
+ * The target truncates the return to 16 bits at BOTH call sites (`sll 16` + `blez`, then
+ * `sll 16`/`sra 16`/`slti 6`). Declaring the callee `s16` also matches, but the fleet's carried
+ * decl layer spells it `extern s32 func_80159464(void);` in 1600 places — if reconcile_tu wins
+ * that conflict the truncation vanishes and the match dies. The explicit cast makes the body
+ * independent of which decl survives.
+ *
+ * Symbols verified present in build/ov_SC01_077/undefined_syms_auto.txt:
+ * D_80078EB4=0x80078EB4 D_800B9A17=0x800B9A17 D_800B9A64=0x800B9A64 D_80110EC0=0x80110EC0
+ */
+
+
+DEFINE_func_80158638() /* dedup: shared engine-core @0x80158638 (src/shared) */
+
+
+void func_80158794(void) {
+}
+
+
+// @class: plumbing
+// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order)
+
+extern void func_80147084(s32 *a0);
+extern void func_80147098(s32 *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern void func_80158880(s32 *param);
+
+void func_8015879C(s32 param_1) {
+
+ extern s32 D_801C8580;
+ extern s32 D_801C858C;
+ extern s32 D_801C8590;
+ D_801C8580 = 0;
+ D_801C858C = 1;
+ D_801C8590 = 0;
+ *(u8 *)(param_1 + 0xa8) = 0;
+ ((void (*)(void))func_80147084)();
+ ((void (*)(s32))func_80147098)(param_1);
+ ((void (*)(s32))func_801470AC)(param_1);
+ ((void (*)(s32, s32))func_80147078)(param_1, 0x1a);
+ ((void (*)(s32, s32))func_80146C98)(param_1, 1);
+ ((void (*)(s32))func_80158880)(param_1);
+}
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order)
+
+extern void func_80147084(s32 *a0);
+extern void func_80147098(s32 *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80158880(s32 *param);
+
+void func_80158814(void *arg0) {
+
+ extern s32 D_801C8580;
+ extern s32 D_801C858C;
+ extern s32 D_801C8590;
+ D_801C8580 = 0;
+ D_801C858C = 1;
+ D_801C8590 = 0;
+ *(s8 *)((s32)arg0 + 0xA8) = 0;
+ ((void (*)(void))func_80147084)();
+ ((void (*)(void *))func_80147098)(arg0);
+ ((void (*)(void *))func_801470AC)(arg0);
+ ((void (*)(void *, s32))func_80147078)(arg0, 0x1A);
+ ((void (*)(void *))func_80158880)(arg0);
+}
+
+
+
+extern void func_80149020(s32 *a0);
+
+void func_80158880(s32 *param) {
+
+ extern void (*D_80185FA8[])(s32 *);
+ func_80149020(param);
+ D_80185FA8[*(u8 *)((s32)param + 0x4F)](param);
+}
+
+
+INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_801555F4", func_801588CC);
+
+DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158ab4 (src/shared) */
+
+
+DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158ae4 (src/shared) */
+
+
+
+extern void func_80146CA0(void *a0);
+extern s32 func_801472C8(struct S *a0);
+extern void func_80147324(s32 a0);
+extern void func_801474D8(s32 *a0);
+extern void func_801474EC(s32 *a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+
+void func_80158BB0(void *arg0) {
+
+ extern M2C_UNK D_800D58D8;
+ extern s32 D_801C8580;
+ if (D_801C8580 == 0) {
+ D_801C8580 = 1;
+ }
+ func_80147324(0x456);
+ func_80154274(arg0, &D_800D58D8);
+ func_80154A74(arg0, 0x16);
+ M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000;
+ M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0;
+ func_801474EC(arg0);
+ func_801474D8(arg0);
+ func_801472C8(arg0);
+ func_80146CA0(arg0);
+}
+
+
+DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158c40 (src/shared) */
+
+
+DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158cd8 (src/shared) */
+
+
+DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158d60 (src/shared) */
+
+
+DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158e24 (src/shared) */
+
+
+
+// @class: other
+// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot)
+
+
+extern int rand(void);
+extern s32 func_8013767C(s32 a0);
+extern void func_80146CA0(void *a0);
+
+void func_80158F00(int param_1) {
+
+ extern s32 D_801C858C;
+ extern s32 D_80185F7C[];
+ int *self = (int *)param_1;
+ struct Actor *act = (struct Actor *)self[0x20 / 4];
+ int gate = D_801C858C;
+
+ act->timer = (u16)((act->timer + 0x16) & 0xfff);
+
+ if (gate == 0) {
+ s32 r = rand();
+ *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185F7C[r % 0xb]);
+ ((void (*)(int))func_80146CA0)(param_1);
+ }
+}
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464
+// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used
+// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz
+// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C);
+// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg.
+
+
+extern u16 func_80148800(s32 *a0);
+extern s32 func_801399F0(s32);
+extern void func_80139914(s32);
+extern s32 func_80159464(void);
+extern void func_801594E8(s32, s32);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern s32 func_8013767C(s32 a0);
+extern void func_80146CA0(void *a0);
+
+void func_80158FA4(s32 param_1)
+{
+
+ extern s32 D_801C8590;
+ extern u8 D_80110C3C[];
+ s32 v0;
+ s16 sVar1;
+
+ v0 = *(s32 *)(param_1 + 0x20);
+ *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff;
+ if (((s32 (*)(void))func_80148800)() & 0xf0) {
+ D_801C8590 = 1;
+ }
+ if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) {
+ func_80139914(*(s32 *)(param_1 + 0x198));
+ *(s32 *)(param_1 + 0x198) = 0;
+ sVar1 = ((s32 (*)(s32))func_80159464)(param_1);
+ if (sVar1 != 0) {
+ func_801594E8(param_1, sVar1);
+ ((void (*)(s32, s32))func_80146C98)(param_1, 0xc);
+ } else {
+ *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C));
+ ((void (*)(s32))func_80146CA0)(param_1);
+ }
+ }
+}
+
+
+DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */
+
+
+DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */
+
+
+DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592cc (src/shared) */
+
+
+
+extern void func_80145BF8(void);
+extern void func_80146CA0(void *a0);
+
+void func_8015934C(void *arg0) {
+
+ extern u8 D_800AE6BD;
+ extern s32 D_801C8580;
+ extern s32 D_801C8588;
+ void *temp_v1;
+
+ if (D_801C8580 == 4) {
+ D_801C8580 = 5;
+ }
+ if (D_801C8588 != 0) {
+ func_80145BF8();
+ func_80146CA0(arg0);
+ D_800AE6BD += 1;
+ }
+ temp_v1 = M2C_FIELD(arg0, void **, 0x20);
+ M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF);
+}
+
+
+DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593e4 (src/shared) */
+
+
+DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */
+
+
+DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */
+
+
+
+extern s16 currentLocationId;
+extern s32 func_80029A94(s32);
+
+
+s32 func_80159464(void) {
+
+ extern Entry D_80185FE4[];
+ Entry *e;
+
+ e = D_80185FE4;
+ while (e->id != 0) {
+ if (currentLocationId == e->id) {
+ return e->val;
+ }
+ e++;
+ }
+ if (func_80029A94(1) != 0) {
+ goto ret0;
+ }
+ if (func_80029A94(0) != 0) {
+ goto ret0;
+ }
+ return -1;
+ret0:
+ return 0;
+}
+
+
+INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_801555F4", func_801594E8);
+
+
+
+void func_80159698(void *a0) {
+
+ extern void (*D_801861F8[])(void);
+ D_801861F8[*(u8 *)((s32)a0 + 0x15)]();
+}
+
+
+DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596d4 (src/shared) */
+
+
+
+// @class: iv-combine
+// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8;
+// p gcc emits the
+// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a
+// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual
+// guarded do-while `if(base+0x2A8= ab + 0x22) {
+ *q |= orc;
+ }
+ q += 0x21;
+ } while (q < (u32 *)(base + 0x65AC));
+ }
+
+ (*(s16 *)&D_801270C0) = 3;
+ ((void (*)(s32))func_80129248)(0);
+ func_8013C938();
+ func_8013CB20();
+ func_8013C98C();
+ func_8002850C(0x800, 0x800, 0x800);
+ func_80028620(0, &(*(u8 *)&D_80186018));
+ func_80028620(1, &(*(u8 *)&D_80186018) + 0x10);
+ func_80028620(2, &(*(u8 *)&D_80186018) + 0x20);
+ *(s32 *)(param_1 + 0x28) = 0xff;
+ *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
+ }
+ return 0;
+}
+
+
+DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */
+
+
+DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987c (src/shared) */
+
+
+DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598bc (src/shared) */
+
+
+DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598e0 (src/shared) */
+
+
+
+
+void func_80159968(void *a0) {
+
+ extern void (*D_8018629C[])(void);
+ D_8018629C[*(u8 *)((s32)a0 + 0x4D)]();
+}
+
+
+
+
+void func_801599A4(void *a0) {
+
+ extern void (*D_801862A8[])(void);
+ D_801862A8[*(u16 *)((s32)a0 + 0x0)]();
+}
+
+
+DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
+
+
+void func_80159A18(void) {
+}
+
+INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_801555F4", func_80159A20);
+
+DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
+
+
+DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159b3c (src/shared) */
+
+
+
+
+void func_80159B70(void *a0) {
+
+ extern void (*D_801863F0[])(void);
+ D_801863F0[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159bac (src/shared) */
+
+
+
+// @class: schedule
+// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a
+// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm
+// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch
+// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`.
+
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80154150(s32 a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553C0(s32 a0);
+extern void func_801553A8(s32 *a0);
+extern s32 func_80172590(u8 *a0);
+extern void func_80146CA0(void *a0);
+
+
+void func_80159BE4(s32 arg0)
+{
+
+ extern unsigned char D_8018620C;
+ int v;
+
+ ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018620C);
+ if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) {
+ func_80154150(arg0, 5);
+ func_80154A74(arg0, 0x1C);
+ } else {
+ func_80154150(arg0, 4);
+ func_80154A74(arg0, 0x11);
+ }
+ *(int *)(arg0 + 0x234) = 0;
+ *(int *)(arg0 + 0x238) = 0;
+ func_801553C0(arg0);
+ ((void (*)(int))func_801553A8)(arg0);
+ ((void (*)(int))func_80172590)(arg0);
+ ((void (*)(int))func_80146CA0)(arg0);
+}
+
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 273d1213a..e071408a8 100644
--- a/src/ov_SC03_107/ov_SC03_107_jr_8013F350.c
+++ b/src/ov_SC03_107/ov_SC03_107_jr_8013F350.c
@@ -6959,1038 +6959,3 @@ void func_80155580(void *a0) {
DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555bc (src/shared) */
-
-
-INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_801555F4);
-
-DEFINE_func_80155800() /* dedup: shared engine-core @0x80155800 (src/shared) */
-
-
-DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155a44 (src/shared) */
-
-
-DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155b20 (src/shared) */
-
-
-DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155b9c (src/shared) */
-
-
-DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155c0c (src/shared) */
-
-
-DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155c64 (src/shared) */
-
-
-DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155d70 (src/shared) */
-
-
-DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155e30 (src/shared) */
-
-
-DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155ea4 (src/shared) */
-
-
-void func_80155F58(void) {
-}
-
-DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155f60 (src/shared) */
-
-
-DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155f80 (src/shared) */
-
-
-DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155fb0 (src/shared) */
-
-
-DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155fd4 (src/shared) */
-
-
-DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155ff8 (src/shared) */
-
-
-
-void func_80156044(int param_1, int param_2)
-{
- extern u32 func_8015616C(s32 a0, u16 a1);
- extern void func_80156670(s32, s32, s32, s32, s32, u16);
- extern void func_801567BC(s32 a0);
- extern void func_80156848(s32, s32);
- extern void func_80156A88(s32 a0, s32 a1);
- extern s32 func_801565C0(void);
- extern u8 D_801844D0;
- extern u8 D_801844E4;
- extern u8 D_80184368;
-
- register s32 puVar2 __asm__("$2");
- register s32 iVar3 __asm__("$3");
- u8 *puVar4;
- s32 uVar1;
-
- if (((u32)param_2) & 0x10000) {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_801844D0;
- } else if (((u32)param_2) & 0x20000) {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_801844E4;
- } else {
- iVar3 = (((u32)param_2) & 0xffff) * 0x14;
- puVar2 = (s32)&D_80184368;
- }
- puVar4 = (u8 *)(iVar3 + puVar2);
- uVar1 = func_8015616C(((s32)param_1), *(u16 *)puVar4) & 0xffff;
- if (*(u8 *)(((s32)param_1) + 0x1a8) != 0) {
- ((void (*)(s32, s32, s32, s32, s32, s32))func_80156670)(((s32)param_1), *(s32 *)puVar4, uVar1, *(s32 *)(puVar4 + 4),
- *(u8 *)(puVar4 + 0xA), *(u16 *)(puVar4 + 0x12));
- if (*(u8 *)(puVar4 + 0x10) != 0) {
- func_801567BC(((s32)param_1));
- }
- ((void (*)(s32, s32, s32))func_80156848)(((s32)param_1), (s32)puVar4, uVar1);
- func_80156A88(((s32)param_1), (s32)puVar4);
- if (((s32 (*)(s32))func_801565C0)(((s32)param_1)) != 0) {
- *(u8 *)(((s32)param_1) + 0x1c0) = 1;
- }
- }
-}
-
-
-DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616c (src/shared) */
-
-
-DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */
-
-
-
-
-S801563EC *func_801563EC(u16 idx) {
-
- extern S801563EC D_8018450C[];
- return &D_8018450C[idx];
-}
-
-
-DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640c (src/shared) */
-
-
-DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564b0 (src/shared) */
-
-
-DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565c0 (src/shared) */
-
-
-DEFINE_func_80156600() /* dedup: shared engine-core @0x80156600 (src/shared) */
-
-DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */
-
-
-
-DEFINE_func_80156670() /* dedup: shared engine-core @0x80156670 (src/shared) */
-
-
-DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567bc (src/shared) */
-
-
-DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */
-
-
-DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156a14 (src/shared) */
-
-
-
-// @class: struct
-// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018477C indexed halfword folds %lo
-extern void func_80147324(s32 arg0);
-
-void func_80156A1C(s32 param_1, s32 param_2)
-{
-
- extern unsigned char D_8011520C[];
- extern unsigned short D_8018477C[];
- if (*(unsigned char *)(param_1 + 0xDA) == 0) {
- func_80147324(D_8018477C[D_8011520C[param_2]]);
- *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1;
- }
-}
-
-
-DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156a88 (src/shared) */
-
-
-DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156b74 (src/shared) */
-
-
-DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ecc (src/shared) */
-
-
-DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156fa8 (src/shared) */
-
-
-DEFINE_func_80157158() /* dedup: shared engine-core @0x80157158 (src/shared) */
-
-
-DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571c4 (src/shared) */
-
-
-DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574dc (src/shared) */
-
-
-DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */
-
-
-
-
-void func_80157544(void *a0) {
-
- extern void (*D_8018478C[])(void);
- D_8018478C[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */
-
-
-DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575e4 (src/shared) */
-
-
-DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576a8 (src/shared) */
-
-
-DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771c (src/shared) */
-
-
-DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773c (src/shared) */
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across)
-
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_801578C0(s32 a0);
-
-void func_80157788(int param_1)
-{
-
- extern int D_8019A8D8;
- D_8019A8D8 = 300;
- ((void (*)(int, int))func_80147078)(param_1, 7);
- func_801578C0(param_1);
-}
-
-
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80157808(s32 *a0);
-
-void func_801577C8(s32 *a0)
-{
- /* [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_8019A8D8;
- D_8019A8D8 = 0x12C;
- func_80147078(a0, 0x7);
- func_80157808(a0);
-}
-
-
-INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_80157808);
-
-DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274
-
-extern void func_80156648(s32 *a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_80147324(s32 arg0);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_80146CA0(void *a0);
-extern s32 func_801725A4(u8 *a0);
-
-void func_801578C0(s32 param_1)
-{
-
- extern u8 D_800D5128;
- extern u8 D_80184794;
- ((void (*)(void))func_80156648)();
- *(u8 *)(param_1 + 0x1AA) = 9;
- func_80154274((s32 *)param_1, (s32)&D_800D5128);
- ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15);
- func_80147324(0xC20);
- ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184794);
- ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0);
- ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0);
- ((void (*)(s32 *))func_80146CA0)((s32 *)param_1);
- ((void (*)(s32 *))func_801725A4)((s32 *)param_1);
-}
-
-
-
-// @class: other
-// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only
-// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves
-// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT
-// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16
-// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH.
-
-extern void func_80147A10(int a0, int a1);
-extern void func_80147A84(int);
-extern void func_801473EC(s32 *a0);
-extern void func_80148038(int, int);
-extern void func_80147460(int);
-extern void func_8014ED28(s32 _arg0);
-extern void func_80146D90(int);
-extern void func_80161450(void *a0);
-extern void func_80157A8C(int);
-extern void func_80146E90(s32 *a0, s32 a1);
-extern void func_80146CA0(void *a0);
-extern int func_80155FF8(int arg, int a1);
-extern void func_80154A74(int, int);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_801477E8(s32 *a0, s32 a1);
-extern s32 func_801725A4(u8 *a0);
-
-
-void func_8015795C(int param_1)
-{
-
- extern unsigned char D_800D5178;
- extern unsigned char D_801847A4;
- int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */
- int iVar1;
- unsigned int uVar2;
-
- *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2;
- ((int (*)(int, int))func_80147A10)(param_1, 0x400);
- if (*(int *)(param_1 + 0x2c) >= 0) {
- *(int *)(param_1 + 0x2c) = 0;
- }
- func_80147A84(param_1);
- ((void (*)(int))func_801473EC)(param_1);
- func_80148038(param_1, 0x1a000);
- func_80147460(param_1);
- iVar1 = ((int (*)(int))func_8014ED28)(param_1);
- if (iVar1 != 0) {
- func_80146D90(param_1);
- }
- uVar2 = ((int (*)(int))func_80161450)(param_1);
- if ((uVar2 & 5) != 0) {
- func_80157A8C(param_1);
- ((void (*)(int, int))func_80146E90)(param_1, 8);
- ((void (*)(int))func_80146CA0)(param_1);
- }
- if (uVar2 == 0) {
- ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa));
- if (*(unsigned char *)(param_1 + 0x1c0) != 0) {
- func_80154A74(param_1, 0x17);
- ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178);
- ((void (*)(int, void *))func_80146DB8)(param_1, &D_801847A4);
- ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000);
- *(short *)(param_1 + 2) = 4;
- }
- ((void (*)(int))func_801725A4)(param_1);
- }
- return;
-}
-
-
-DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157a8c (src/shared) */
-
-
-DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157ac8 (src/shared) */
-
-
-DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157b74 (src/shared) */
-
-
-DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157bc8 (src/shared) */
-
-
-DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157ccc (src/shared) */
-
-
-
-/* func_80157D20 — 21-ins plumbing shim (×138 overlays).
- *
- * §71 sibling-first: the immediate neighbour func_801578C0 in this very TU
- * (src/ov_SC01_077/ov_SC01_077_jr_80154C24.c L1592) already matches with
- * `((void (*)(void))func_80156648)();` — the zero-argument call form. The
- * target likewise sets up NO argument registers before `jal func_80156648`
- * ($a0/$a1 still carry this function's own incoming args), so the call is
- * argument-less here too.
- *
- * The `lhu %lo(D_801847E4)($at)` with `sll $s0,$s0,1` => a plain u16 array
- * indexed by the second parameter, NOT hoisted into a pointer (§20: a pointer
- * var would keep one address register live across the call; the target rebuilds
- * the %hi/%lo pair inline after the call returns).
- *
- * §73 PARAMS axis / §42 lever 6 — the fleet canon for this symbol is
- * `extern void func_80157D20(void);` (this TU's carried decl layer, L399, and
- * every sibling overlay's). A 2-param definition hard-errors with
- * `conflicting types` in the real TU (rtu_match, byte-verified), and the canon
- * cannot be widened from a draft (that is an R22 fleet edit). So keep the
- * `(void)` signature and capture $a0/$a1 with register pins copied into NORMAL
- * pseudos — the copies are live across `jal func_80156648`, so they get the
- * callee-saved homes the target uses ($s1 = a0, $s0 = a1). A direct
- * `register` use would leave the values in call-clobbered $a0/$a1.
- */
-
-extern void func_80156648(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80157D74(u16 *a0);
-
-void func_80157D20(void)
-{
-
- extern u16 D_801847E4[];
- register void *a0v __asm__("$4");
- register s32 a1v __asm__("$5");
- void *param_1 = a0v;
- s32 param_2 = a1v;
-
- ((void (*)(void))func_80156648)();
- ((void (*)(void *, s32))func_80147078)(param_1, D_801847E4[param_2]);
- ((void (*)(void *))func_80157D74)(param_1);
-}
-
-
-DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157d74 (src/shared) */
-
-
-
-
-void func_80157DC4(void *a0) {
-
- extern void (*D_801847F4[])(void);
- D_801847F4[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157e00 (src/shared) */
-
-
-DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157e38 (src/shared) */
-
-
-DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157ea4 (src/shared) */
-
-
-DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157f64 (src/shared) */
-
-
-
-
-void func_80157FC4(void *a0) {
-
- extern void (*D_801847FC[])(void);
- D_801847FC[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots
-
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_80147324(s32 arg0);
-extern void func_80146CA0(void *a0);
-
-
-void func_80158038(void * param)
-{
-
- extern s32 D_800D51E0;
- extern s32 D_801847C8;
- *(u8 *)(param + 0x1aa) = 0xe;
- func_80154274((s32 *)param, (s32)&D_800D51E0);
- func_80154A74(param, 0x15);
- func_80146DB8((s32 *)param, &D_801847C8);
- *(s32 *)(param + 0x234) = 0;
- func_80146994(5, param, 0xc, 0);
- func_80147324(0x455);
- func_80146CA0((void *)param);
-}
-
-
-DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580b4 (src/shared) */
-
-
-DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581ac (src/shared) */
-
-
-
-
-void func_8015824C(void *a0) {
-
- extern void (*D_80184808[])(void);
- D_80184808[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */
-
-
-DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582c0 (src/shared) */
-
-
-DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */
-
-
-
-// @class: other
-// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code)
-
-extern void func_8014CBF8(void *a0);
-extern void func_801474EC(s32 *a0);
-extern void func_801477E8(s32 *a0, s32 a1);
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_80148038(s32 a0, s32 a1);
-extern void func_80147460(s32 a0);
-extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
-extern void func_801473EC(s32 *a0);
-extern s32 func_801615C4(void *a0, s32 a1);
-extern s32 func_80146E98(s32 a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80146CA0(void *a0);
-extern int func_80155FF8(int arg, int a1);
-
-
-void func_80158434(s32 param_1)
-{
-
- extern u8 D_801847D8;
- extern u8 D_800D533C;
- u32 uVar1;
- u32 uVar2;
- s32 frame_pad[4];
- (void)&frame_pad;
-
- *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2;
- if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) {
- *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1;
- ((s32 (*)(void))func_8014CBF8)();
- ((void (*)(s32))func_801474EC)(param_1);
- ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000);
- ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801847D8);
- }
- if (*(s32 *)(param_1 + 0x234) != 0) {
- func_80148038(param_1, 0x10000);
- func_80147460(param_1);
- func_80147AD4(param_1, 0, 0, 0);
- ((void (*)(s32))func_801473EC)(param_1);
- }
- uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0);
- if (uVar1 != 0) {
- if (uVar1 == 1) goto LAB_80158508;
- uVar2 = uVar1 & 0x2000;
- } else {
- uVar2 = func_80146E98(param_1);
- }
- if (uVar2 == 0) goto LAB_80158528;
-LAB_80158508:
- ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C);
- ((void (*)(s32))func_80146CA0)(param_1);
- return;
-LAB_80158528:
- ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA));
-}
-
-
-DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */
-
-
-DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585a4 (src/shared) */
-
-
-DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585ac (src/shared) */
-
-
-DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585ec (src/shared) */
-
-
-
-// @class: loose-typing
-// @stuck: none — MATCH (87 ins, match_one) + symcheck SYMS-OK (17 symbols agree); same file also
-// MATCHes verbatim against ov_SC03_099 and ov_SC06_008 (sibling asm bodies are identical)
-
-/* func_80158638 @ 0x80158638 — ov_SC01_077 / ov_SC01_077_jr_80154C24 (87 ins).
- *
- * TWO decl-ROBUSTNESS choices in the BODY, deliberate — these are the only two things the gate's
- * decl ladder (cast_call_sites/reconcile_tu/sig_unify) CANNOT repair, because they change codegen,
- * not plumbing. Both are load-bearing for templating this exemplar onto its 138 h_seq siblings,
- * where each overlay TU carries its own spelling of these decls:
- *
- * 1) `*(u16 *)&D_80078EB4` — the target loads it with `lhu`. The ov_SC01_077 TU already carries
- * `extern s16 D_80078EB4;` (line 504), and a plain `D_80078EB4 != 0` read through an s16 decl
- * compiles to `lh` => WIDTH/lh!=lhu, closeness 1. A `(u16)` cast does NOT fix it (gcc-2.7.2
- * folds the zero_extend away for a !=0 test and keeps `lh`); the pointer pun does, and it is
- * correct under EITHER declared signedness.
- * 2) `(s16)func_80159464(...)` with the fleet-canonical `extern s32 func_80159464();` decl.
- * The target truncates the return to 16 bits at BOTH call sites (`sll 16` + `blez`, then
- * `sll 16`/`sra 16`/`slti 6`). Declaring the callee `s16` also matches, but the fleet's carried
- * decl layer spells it `extern s32 func_80159464(void);` in 1600 places — if reconcile_tu wins
- * that conflict the truncation vanishes and the match dies. The explicit cast makes the body
- * independent of which decl survives.
- *
- * Symbols verified present in build/ov_SC01_077/undefined_syms_auto.txt:
- * D_80078EB4=0x80078EB4 D_800B9A17=0x800B9A17 D_800B9A64=0x800B9A64 D_80110EC0=0x80110EC0
- */
-
-
-DEFINE_func_80158638() /* dedup: shared engine-core @0x80158638 (src/shared) */
-
-
-void func_80158794(void) {
-}
-
-
-// @class: plumbing
-// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order)
-
-extern void func_80147084(s32 *a0);
-extern void func_80147098(s32 *a0);
-extern void func_801470AC(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80146C98(s32 *a0, s16 a1);
-extern void func_80158880(s32 *param);
-
-void func_8015879C(s32 param_1) {
-
- extern s32 D_8019A8E0;
- extern s32 D_8019A8EC;
- extern s32 D_8019A8F0;
- D_8019A8E0 = 0;
- D_8019A8EC = 1;
- D_8019A8F0 = 0;
- *(u8 *)(param_1 + 0xa8) = 0;
- ((void (*)(void))func_80147084)();
- ((void (*)(s32))func_80147098)(param_1);
- ((void (*)(s32))func_801470AC)(param_1);
- ((void (*)(s32, s32))func_80147078)(param_1, 0x1a);
- ((void (*)(s32, s32))func_80146C98)(param_1, 1);
- ((void (*)(s32))func_80158880)(param_1);
-}
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order)
-
-extern void func_80147084(s32 *a0);
-extern void func_80147098(s32 *a0);
-extern void func_801470AC(s32 *a0);
-extern void func_80147078(s32 *a0, s16 a1);
-extern void func_80158880(s32 *param);
-
-void func_80158814(void *arg0) {
-
- extern s32 D_8019A8E0;
- extern s32 D_8019A8EC;
- extern s32 D_8019A8F0;
- D_8019A8E0 = 0;
- D_8019A8EC = 1;
- D_8019A8F0 = 0;
- *(s8 *)((s32)arg0 + 0xA8) = 0;
- ((void (*)(void))func_80147084)();
- ((void (*)(void *))func_80147098)(arg0);
- ((void (*)(void *))func_801470AC)(arg0);
- ((void (*)(void *, s32))func_80147078)(arg0, 0x1A);
- ((void (*)(void *))func_80158880)(arg0);
-}
-
-
-
-extern void func_80149020(s32 *a0);
-
-void func_80158880(s32 *param) {
-
- extern void (*D_80184844[])(s32 *);
- func_80149020(param);
- D_80184844[*(u8 *)((s32)param + 0x4F)](param);
-}
-
-
-INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_801588CC);
-
-DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158ab4 (src/shared) */
-
-
-DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158ae4 (src/shared) */
-
-
-
-extern void func_80146CA0(void *a0);
-extern s32 func_801472C8(struct S *a0);
-extern void func_80147324(s32 a0);
-extern void func_801474D8(s32 *a0);
-extern void func_801474EC(s32 *a0);
-extern void func_80154274(s32 *a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-
-void func_80158BB0(void *arg0) {
-
- extern M2C_UNK D_800D58D8;
- extern s32 D_8019A8E0;
- if (D_8019A8E0 == 0) {
- D_8019A8E0 = 1;
- }
- func_80147324(0x456);
- func_80154274(arg0, &D_800D58D8);
- func_80154A74(arg0, 0x16);
- M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000;
- M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0;
- func_801474EC(arg0);
- func_801474D8(arg0);
- func_801472C8(arg0);
- func_80146CA0(arg0);
-}
-
-
-DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158c40 (src/shared) */
-
-
-DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158cd8 (src/shared) */
-
-
-DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158d60 (src/shared) */
-
-
-DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158e24 (src/shared) */
-
-
-
-// @class: other
-// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot)
-
-
-extern int rand(void);
-extern s32 func_8013767C(s32 a0);
-extern void func_80146CA0(void *a0);
-
-void func_80158F00(int param_1) {
-
- extern s32 D_8019A8EC;
- extern s32 D_80184818[];
- int *self = (int *)param_1;
- struct Actor *act = (struct Actor *)self[0x20 / 4];
- int gate = D_8019A8EC;
-
- act->timer = (u16)((act->timer + 0x16) & 0xfff);
-
- if (gate == 0) {
- s32 r = rand();
- *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184818[r % 0xb]);
- ((void (*)(int))func_80146CA0)(param_1);
- }
-}
-
-
-
-// @class: plumbing
-// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464
-// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used
-// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz
-// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C);
-// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg.
-
-
-extern u16 func_80148800(s32 *a0);
-extern s32 func_801399F0(s32);
-extern void func_80139914(s32);
-extern s32 func_80159464(void);
-extern void func_801594E8(s32, s32);
-extern void func_80146C98(s32 *a0, s16 a1);
-extern s32 func_8013767C(s32 a0);
-extern void func_80146CA0(void *a0);
-
-void func_80158FA4(s32 param_1)
-{
-
- extern s32 D_8019A8F0;
- extern u8 D_80110C3C[];
- s32 v0;
- s16 sVar1;
-
- v0 = *(s32 *)(param_1 + 0x20);
- *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff;
- if (((s32 (*)(void))func_80148800)() & 0xf0) {
- D_8019A8F0 = 1;
- }
- if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) {
- func_80139914(*(s32 *)(param_1 + 0x198));
- *(s32 *)(param_1 + 0x198) = 0;
- sVar1 = ((s32 (*)(s32))func_80159464)(param_1);
- if (sVar1 != 0) {
- func_801594E8(param_1, sVar1);
- ((void (*)(s32, s32))func_80146C98)(param_1, 0xc);
- } else {
- *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C));
- ((void (*)(s32))func_80146CA0)(param_1);
- }
- }
-}
-
-
-DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */
-
-
-DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */
-
-
-DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592cc (src/shared) */
-
-
-
-extern void func_80145BF8(void);
-extern void func_80146CA0(void *a0);
-
-void func_8015934C(void *arg0) {
-
- extern u8 D_800AE6BD;
- extern s32 D_8019A8E0;
- extern s32 D_8019A8E8;
- void *temp_v1;
-
- if (D_8019A8E0 == 4) {
- D_8019A8E0 = 5;
- }
- if (D_8019A8E8 != 0) {
- func_80145BF8();
- func_80146CA0(arg0);
- D_800AE6BD += 1;
- }
- temp_v1 = M2C_FIELD(arg0, void **, 0x20);
- M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF);
-}
-
-
-DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593e4 (src/shared) */
-
-
-DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */
-
-
-DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */
-
-
-
-extern s16 currentLocationId;
-extern s32 func_80029A94(s32);
-
-
-s32 func_80159464(void) {
-
- extern Entry D_80184880[];
- Entry *e;
-
- e = D_80184880;
- while (e->id != 0) {
- if (currentLocationId == e->id) {
- return e->val;
- }
- e++;
- }
- if (func_80029A94(1) != 0) {
- goto ret0;
- }
- if (func_80029A94(0) != 0) {
- goto ret0;
- }
- return -1;
-ret0:
- return 0;
-}
-
-
-INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_801594E8);
-
-
-
-void func_80159698(void *a0) {
-
- extern void (*D_80184A94[])(void);
- D_80184A94[*(u8 *)((s32)a0 + 0x15)]();
-}
-
-
-DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596d4 (src/shared) */
-
-
-
-// @class: iv-combine
-// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8;
-// p gcc emits the
-// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a
-// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual
-// guarded do-while `if(base+0x2A8= ab + 0x22) {
- *q |= orc;
- }
- q += 0x21;
- } while (q < (u32 *)(base + 0x65AC));
- }
-
- (*(s16 *)&D_801270C0) = 3;
- ((void (*)(s32))func_80129248)(0);
- func_8013C938();
- func_8013CB20();
- func_8013C98C();
- func_8002850C(0x800, 0x800, 0x800);
- func_80028620(0, &(*(u8 *)&D_801848B4));
- func_80028620(1, &(*(u8 *)&D_801848B4) + 0x10);
- func_80028620(2, &(*(u8 *)&D_801848B4) + 0x20);
- *(s32 *)(param_1 + 0x28) = 0xff;
- *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
- }
- return 0;
-}
-
-
-DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */
-
-
-DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987c (src/shared) */
-
-
-DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598bc (src/shared) */
-
-
-DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598e0 (src/shared) */
-
-
-
-
-void func_80159968(void *a0) {
-
- extern void (*D_80184B38[])(void);
- D_80184B38[*(u8 *)((s32)a0 + 0x4D)]();
-}
-
-
-
-
-void func_801599A4(void *a0) {
-
- extern void (*D_80184B44[])(void);
- D_80184B44[*(u16 *)((s32)a0 + 0x0)]();
-}
-
-
-DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
-
-
-void func_80159A18(void) {
-}
-
-INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_80159A20);
-
-DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
-
-
-DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159b3c (src/shared) */
-
-
-
-
-void func_80159B70(void *a0) {
-
- extern void (*D_80184C8C[])(void);
- D_80184C8C[*(u16 *)((s32)a0 + 0x2)]();
-}
-
-
-DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159bac (src/shared) */
-
-
-
-// @class: schedule
-// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a
-// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm
-// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch
-// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`.
-
-extern void func_80146DB8(s32 *a0, s32 *a1);
-extern void func_80154150(s32 a0, s32 a1);
-extern void func_80154A74(s32 a0, s32 a1);
-extern void func_801553C0(s32 a0);
-extern void func_801553A8(s32 *a0);
-extern s32 func_80172590(u8 *a0);
-extern void func_80146CA0(void *a0);
-
-
-void func_80159BE4(s32 arg0)
-{
-
- extern unsigned char D_80184AA8;
- int v;
-
- ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184AA8);
- if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) {
- func_80154150(arg0, 5);
- func_80154A74(arg0, 0x1C);
- } else {
- func_80154150(arg0, 4);
- func_80154A74(arg0, 0x11);
- }
- *(int *)(arg0 + 0x234) = 0;
- *(int *)(arg0 + 0x238) = 0;
- func_801553C0(arg0);
- ((void (*)(int))func_801553A8)(arg0);
- ((void (*)(int))func_80172590)(arg0);
- ((void (*)(int))func_80146CA0)(arg0);
-}
diff --git a/src/ov_SC03_107/ov_SC03_107_jr_801555F4.c b/src/ov_SC03_107/ov_SC03_107_jr_801555F4.c
new file mode 100644
index 000000000..9d9a4a326
--- /dev/null
+++ b/src/ov_SC03_107/ov_SC03_107_jr_801555F4.c
@@ -0,0 +1,3114 @@
+#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(void);
+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 s32 D_80126AEC;
+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_800B9AAC[];
+extern s16 D_800B9AAE[];
+extern s16 D_800B9AB0[];
+extern s16 D_800B9AB2[];
+extern s16 D_800B9AB4[];
+extern s16 D_800B9AB6[];
+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 u8 D_80126948[];
+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 u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
+extern s32 D_80126FA8[];
+extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
+extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
+extern s32 D_800AE688[];
+extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
+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 s32 D_801151D4;
+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 *D_80126B78;
+extern s32 *D_80126B90;
+extern s32 D_80126B58;
+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_801274D4;
+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 u8 D_800AF630[];
+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 s32 D_80127520;
+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 s32 D_801151D0;
+extern u16 D_8011511A;
+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 short D_80115128;
+extern s32 func_8013FFD8(s16 arg0, s32 arg1, s32 *arg2);
+extern s32 func_8014032C(s32 param_1, s32 param_2);
+extern s32 func_80028D58(void);
+extern s32 func_80028DE0(void);
+extern s32 func_80028FBC(void);
+extern s32 func_80029000(void);
+extern s32 func_80028D9C(void);
+extern s16 func_8014168C(s16);
+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 void func_80140E6C(void);
+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 void func_80140F00(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_80115148[];
+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 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);
+extern void func_801458E0(void);
+extern s32 D_800AE6AC;
+extern s32 D_800AE6B0;
+extern s16 D_800B9A0A;
+extern u8 D_80078E50;
+extern void func_800D185C(u8 *a0);
+extern void func_801458E8(void);
+extern void func_80145B24(void);
+extern void func_80145934(void);
+extern void func_80145A2C(void);
+extern void func_80162120(void);
+extern void func_80029124(s32, s32);
+extern s32 func_80165A50(s32);
+extern void func_80029514(s32);
+extern u8 D_80078EC0;
+extern void func_80145BF8(void);
+extern void func_80145C54(void);
+extern void func_80146014(s32 a0);
+extern void func_80145EE8(s32 param_1);
+extern void MoveImage(void *a0, s32 a1, s32 a2);
+extern s32 func_80146128(void);
+extern void func_80146360(void);
+extern void func_801463A0();
+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 u8 D_80126BA4;
+extern void (*D_80183F98[])(void *);
+extern void func_8014C6F4();
+extern void func_80155150(s32 a0);
+extern void func_801470C0(s32 a0);
+extern void func_80147478(s32 a0);
+extern void func_80147118(s32 a0);
+extern void func_8014BDE8(s32 a0);
+extern short func_801508F8(s32 a0);
+extern void func_8014B5B0(s32 *a0);
+extern void func_80161D88(s32 a0);
+extern void func_801463A0(void);
+extern s32 D_80127098;
+extern s32 D_80127094;
+extern s32 D_80127090;
+extern void func_80146534(void);
+extern void func_8001D074(s32 a0, s32 a1);
+extern void func_80146554(void);
+extern void func_80146578(void);
+extern void func_8001CFDC(s32, s32);
+extern void func_8014659C(void);
+extern void func_8001D074(s32, s32);
+extern void func_801465C0(void);
+extern void func_801465E4(void);
+extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8);
+extern s32 D_8011F9D0;
+extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13);
+extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5);
+extern u16 *func_80146750(u16 *param_1);
+extern u16 *func_8014680C(short *param_1);
+extern void aF801466F0(u16 a0, s32 a1, u16 a2, u16 a3, u16 sp5, s32 sp6, s32 sp7, s32 sp8) __asm__("func_801466F0");
+extern void aF801466F0(u16 a0, s32 a1, u16 a2, u16 a3, u16 sp5, s32 sp6, s32 sp7, s32 sp8);
+extern unsigned short D_8011FD10;
+extern int D_8011FA1C;
+extern unsigned short D_8011F9D6;
+extern unsigned short D_8011F9DA;
+extern unsigned short D_8011F9DE;
+extern int D_8011FA20;
+extern int D_8011FA24;
+extern unsigned short * func_80146750(unsigned short *a0);
+extern unsigned short * func_8014680C(short *param_1);
+extern s32 D_8011F750;
+extern s32 D_8011F754;
+extern u8 * func_801468C8(s32 arg0, u8 arg1);
+extern s32 D_8011D030;
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5);
+extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8);
+extern void func_80146AFC(void*);
+extern void aF80146A6C();
+extern s32 func_80146B9C(void *a0);
+extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6);
+extern s32 func_80146B9C(void * arg0);
+extern s32 aF80146AFC();
+extern u16 D_8011DA28;
+extern void func_80146C3C(u8 *a0);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern void func_80146CA0(void *a0);
+extern void func_80146CB4(void *a0);
+extern void func_80146CC8(s32 a0);
+extern void func_80146D30(s32 a0);
+extern void func_80146D80(s32 *a0);
+extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146D90(s32 a0);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern s32 func_80146E98(s32 a0);
+extern void func_80149374(s32 a0, s32 a1);
+extern void func_80146F58(s32 a0, s32 a1);
+extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_8014704C(s32 *a0);
+extern s32 func_80147054(void *a0);
+extern void func_80147060(u8 * a0);
+extern void func_8014706C(void *arg0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80147084(s32 *a0);
+extern void func_8014708C(void *arg0);
+extern s32 func_801470A0(void *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_801470B4(s32 arg0);
+extern s16 D_80126BB8;
+extern s16 D_80126BBA;
+extern s16 D_80126BBC;
+extern void func_80147264(s32 a0);
+extern void func_80147290(void);
+extern void func_801472B4(void *a0);
+extern s32 func_801472C8(struct S *a0);
+extern void *D_8012707C;
+extern void func_801472DC(void);
+extern void func_801472F0(void *a0);
+extern void func_80147364();
+extern void func_80147300(u16 arg0);
+extern void func_80147324(s32 arg0);
+extern void func_80015978(s32, s32*);
+extern s32 aF8012E5CC(s32, s32, s32) __asm__("func_8012E5CC");
+extern void aF80147364();
+extern void func_801473EC(s32 *a0);
+extern void func_80147460(s32 a0);
+extern void func_80147514();
+extern void func_80147628(s32 a0);
+extern void func_801474D8(s32 *a0);
+extern void func_801474EC(s32 *a0);
+extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2);
+extern s32 func_800129CC(s32 a0, s32 a1);
+extern void func_80147514(s32 arg0);
+extern void func_80013F3C(s32 a0);
+extern void func_80012558(s32 a0, s32 a1);
+extern void func_800126C4(s32 a0, s32 a1);
+extern void func_800123F0(s32 a0, s32 a1);
+extern void func_80147718(s32 a0);
+extern void func_80147788(void *a0, s32 a1);
+extern void func_801477A8(void *a0, s32 a1);
+extern void func_801477C8(void *a0, s32 a1);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern void func_80147814(s32 a0, s32 a1);
+extern void func_80147928(int a0, int a1);
+extern void func_8014799C(int a0, int a1);
+extern void func_80147A10(int a0, int a1);
+extern void func_80147860(int a0, int a1, int a2, int a3);
+extern void func_80147948(s32 a0, s32 a1, s32 a2);
+extern void func_801479BC(s32 a0, s32 a1, s32 a2);
+extern void func_80147A30(s32 a0, s32 a1, s32 a2);
+extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147948(int a0, int a1, int a2);
+extern void func_801479BC(int a0, int a1, int a2);
+extern void func_80147A30(int a0, int a1, int a2);
+extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147A84(s32 arg0);
+extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147AAC(s32 arg0);
+extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
+extern void func_80147B5C(s32 a0, void *a1);
+extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4);
+extern void func_80147B18(s32 a0);
+extern void func_80147B5C(s32 arg0, void *arg1);
+extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147DC0(s32 a0, s32 a1);
+extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4);
+extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern void func_80147F50(s32 arg0);
+extern volatile s32 D_80127090;
+extern volatile s32 D_80127094;
+extern volatile s32 D_80127098;
+extern void func_80147F78(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80148038(s32 a0, s32 a1);
+extern s32 csqrt(s32 a0);
+extern s32 func_80012A60(s32 a0, s32 a1);
+extern void func_80148094(int param_1, short *param_2, int *param_3);
+extern void func_80015978(int a0, int *a1);
+extern int func_80133784(int a0, void *a1, int a2);
+extern void func_801483E8(unsigned char *self);
+extern void func_801485B8(s32 a0, s32 a1, s32 a2);
+extern void func_801484B0(s32 a0, s32 a1);
+extern s32 func_80154358(void *a0);
+extern void func_801484E8(s32 a0, s32 a1);
+extern void func_80148534(s32 a0, s32 a1);
+extern void func_8014856C(s32 a0, s32 a1);
+extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2);
+extern void func_80148634(void *a0);
+extern s32 func_80014DC0();
+extern s32 func_80014D68();
+extern s32 func_80014D94();
+extern s32 func_80014CF8();
+extern void func_800120DC();
+extern s32 func_800CF8B4();
+extern u16 func_801487F4(s32 *a0);
+extern u16 func_80148800(s32 *a0);
+extern u8 func_8014880C(s32 *a0);
+extern u16 func_80148818(s32 *a0);
+extern s32 func_80148824(void *arg0);
+extern s32 func_801488A8(u8 *a0);
+extern s32 func_8014891C(s32 a0);
+extern s32 func_80148980(u8 *a0);
+extern s32 func_801489E8(s32 a0);
+extern s32 func_80148A48(s32 a0);
+extern int func_80148AFC(void *a0);
+extern void func_80148AAC(u8 *a0);
+extern s32 func_80148C18(void);
+extern s32 func_80148C20(s32 a0, s16 a1);
+extern s32 func_80148C34(s32 a0, s32 a1);
+extern s32 func_80148C4C(s32 a0, s32 a1);
+extern s32 func_80148C64(s32 a0, s32 a1);
+extern s32 func_80148C7C(void);
+extern s32 func_80148C84(s32 a0, s32 a1);
+extern s32 func_80148C9C(s32 a0, s32 a1);
+extern s32 func_80148CB4(s32 a0, s32 a1);
+extern s32 func_80148CCC(s32 a0, s32 a1);
+extern s32 func_80148CE4(void);
+extern s32 func_80148CEC(void);
+extern s32 func_80148CF4(s32 a0, s32 a1);
+extern s32 func_80148D0C(s32 a0, s32 a1);
+extern s32 func_80148D24(void *a0, int a1);
+extern s32 func_80148D3C(void);
+extern s32 func_80148D44(void);
+extern s32 func_80148F60(void);
+extern s32 func_80148F68(s32 a0);
+extern s32 func_80148F74(s32 a0);
+extern s32 func_80148F80(s32 a0);
+extern s32 func_80148F8C(s32 a0);
+extern s32 func_80148F98(void);
+extern s32 func_80148FA0(s32 a0);
+extern s32 func_80148FAC(s32 a0);
+extern s32 func_80148FB8(s32 a0);
+extern s32 func_80148FC4(s32 a0);
+extern s32 func_80148FD0(void);
+extern s32 func_80148FD8(void);
+extern s32 func_80148FE0(s32 a0);
+extern s32 func_80148FEC(s32 a0);
+extern s32 func_80148FF8(s32 a0);
+extern s32 func_80149004(void);
+extern void func_8014900C(s32 *a0);
+extern void func_80149020(s32 *a0);
+extern void func_80149034(s32 *a0);
+extern void func_80149048(s32 *a0);
+extern void func_8014905C(u8 *a0);
+extern void func_801490E0(s32 *a0, s16 a1);
+extern void func_801490E8(s32 *a0, s16 a1);
+extern void func_801490F0(s32 *a0, s16 a1);
+extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_80012B04(s32 a0, s32 a1, s32 a2);
+extern void func_801490F8(s32 a0, s32 a1);
+extern s32 func_801491C4(s32 a0);
+extern s32 func_80149184(s32 a0);
+extern void func_80149204(s32 *a0);
+extern void func_80149210(s32 a0, s32 a1);
+extern s32 func_80149284(s32 *a0, s32 a1);
+extern void func_80149350(s32 arg0);
+extern void func_80149290(s32 a0);
+extern void func_80149374(s32 arg0, s32 arg1);
+extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3);
+extern void func_8014942C(s32 arg0);
+extern void func_80149450(s32 a0, s16 *a1);
+extern void func_801494CC(s32 a0, u16 *a1, u16 *a2);
+void func_8012F14C(s32 a0, s32 a1, s32 a2);
+void func_8012EF70(s32 a0, s32 a1);
+extern void func_80149544(s32 a0, s32 a1, s32 a2);
+void func_8012EFB8(s32 a0);
+extern void func_80149584(s32 param_1, s32 param_2, s32 param_3);
+extern void func_8014964C(s32 param_1, s32 param_2);
+extern void func_8012EF70(s32, s32);
+extern void func_801495C4(s32 a0, s32 a1);
+extern s32 func_801496D4(void *a0);
+extern void func_8015AD08();
+extern void func_80149704(void);
+extern void func_8015ACC4();
+extern void func_80149724(void);
+extern u8 D_80078EBF;
+extern s32 func_80149744(struct S_80149744 *a0);
+extern void func_8015F7A0();
+extern void func_80149788(void);
+extern u8 D_80078E78[];
+extern u8 D_80078EC1;
+extern s32 func_8014CB7C(void);
+extern s32 func_8014C088(s32 a0, s32 a1);
+extern u8 func_80165658(s32 a0, s32 a1);
+extern s32 func_801497A8(s32 *a0);
+extern void func_801653B8();
+extern void func_80149864(void);
+extern s32 func_8016F1AC(void);
+extern s32 func_80149884(void);
+extern void func_80160B00();
+extern void func_801498C0(void);
+extern s32 func_80149AA8(s32 *a0);
+extern s32 func_80149B54(s32 *a0);
+extern s32 func_801498E0(s32 *a0);
+extern s32 func_800CCF28(s32 a0);
+extern s32 func_80149954(s32 s0);
+extern s32 func_80149A64(s32 *a0);
+extern void func_8015DAC4(s32 *a0);
+extern void func_8015554C(s32 *a0);
+extern void func_80149AD4(s32 *a0);
+extern void func_80149B14(s32 *a0);
+extern u8 func_8014BEF8(void);
+extern s32 func_80149B54(s32 * arg0);
+extern void func_8015DE24(s32 *a0);
+extern void func_80157510(s32 *a0);
+extern void func_80149BAC(s32 *a0);
+extern s32 func_80029178(s32 a0);
+extern s32 func_80149C08(s32 arg0);
+extern void func_801577C8();
+extern void func_80149C94(void);
+extern void func_80157D20(void);
+extern void func_80149CB4(void);
+extern s32 func_80149CD4(s32 a0);
+extern u8 func_8014B5B8(s32 *a0);
+extern s32 func_80149D10(s32 a0);
+extern s32 func_80149E94(s32 a0);
+extern s32 func_80149DD8(s32 a0);
+extern s32 func_80149D9C(s32 a0);
+extern s32 func_80149F2C(s32 a0, s32 a1);
+extern s32 func_80149E94(s32 arg0);
+extern void func_801599A4(void *a0);
+extern void func_80159B3C(void *a0);
+extern void func_8016EDEC(s32, s32, s32);
+extern void func_80149FA8(void);
+extern s32 func_80149FB0(s32 a0);
+extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3);
+extern void func_8014A1B0(s32 a0, s32 a1);
+extern s32 func_8014A048(s32 param_1);
+extern u16 func_80156370(u16 a0);
+extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4);
+extern void func_8015D4B4();
+extern void func_8014A218(void);
+extern s32 func_8014C278(s32 a0, s32 a1, s32 a2);
+extern s32 func_8014C2B0(void *a0, void *a1, s32 a2);
+extern s32 func_8014A238(s32 arg0);
+extern s32 func_8014A2E4(s32 a0);
+extern void func_8014A380(s32 a0, s32 a1);
+extern s16 D_801152B0;
+extern s16 D_801152B4;
+extern s32 func_8014A3E0(struct S_8014A3E0 *a0);
+extern s32 func_8014A454(s32 a0);
+extern s32 func_8014A4B4(void *a0);
+extern void func_8015EDD4();
+extern void func_8014A4FC(void);
+extern int func_8014A51C(int param_1);
+extern s32 func_8014A674(s32 *a0);
+extern s32 func_8014A69C(s32 *a0);
+extern s32 func_8014A6C4(s32 a0);
+extern s32 func_8014A738(void *arg0);
+extern void func_8015E184();
+extern void func_8014A830(void);
+extern s32 func_80029AF4(void);
+extern s32 func_8014A850(s32 param_1);
+extern s32 func_80165A20(s32 a0);
+extern void func_8014AB7C();
+extern void func_8014AC10();
+extern void func_8014AA28(void);
+extern void func_8014AB5C(void);
+extern void func_80162CCC(void);
+extern void func_8014AB7C(s32 arg0);
+extern void func_8014ABF0(void);
+extern void func_8014AC10(s32 arg0);
+extern void func_8014ACC0(s32 a0, s32 a1);
+extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3);
+extern void func_8014ACE8(void *a0, s32 a1, s32 a2);
+extern void func_80146AFC(void *a0);
+extern void func_8014ADA8(s32 a0, s32 a1);
+extern void func_8014AD7C(s32 a0);
+extern s32 D_80078E8C;
+extern s32 func_8016F1C4(void);
+extern s32 func_8014B154(s32 *a0);
+extern void func_8014BD24(s32 a0, s32 a1);
+extern void func_8014BB24(s32 a0, s32 a1, s32 a2);
+extern void func_8014BC80(s32 a0, s32 a1);
+extern void func_8014BD60(s32 a0, s32 a1);
+extern void func_8014B084(void);
+extern void func_8014B034(s32 arg0);
+extern void func_8014B00C(s32 arg0);
+extern s16 D_80078E90;
+extern void func_8014B034(s32 a0);
+extern u16 D_80078EAC;
+extern u8 D_80078EBA;
+extern void func_800D10EC(void);
+extern void func_8002AC98(void);
+extern void func_8014B12C(void);
+extern void func_8014B2F8(void);
+extern void func_8014B4C4(void);
+extern void func_8014B160(s32 a0);
+extern s16 D_80078E96;
+extern s16 D_80078EB8;
+extern u16 D_80078EA6;
+extern void func_8014B2A8(void);
+extern void func_8014B310(void);
+extern void func_8014B2D0(void);
+extern s32 D_80078E94;
+extern s32 D_80078ECC;
+extern void func_8014B33C(void);
+extern u8 D_80062BF4[];
+extern s32 D_80078E98;
+extern void func_8014B4D4(void *a0);
+extern s16 D_80078E9A;
+extern u8 D_80126D1C;
+extern s32 D_80126D74;
+extern void func_8014B598(s32 a0, s32 a1);
+extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2);
+extern void func_8014B5D8(s32 s1);
+extern s32 D_80078E9C;
+extern s32 D_80078ED0;
+extern void func_8014B6F0(s32 a0, s32 a1);
+extern void func_8014B768(s32 a0, s32 a1);
+extern void func_8014B944(s32 a0, s32 a1, s32 a2);
+extern s32 D_80078EA4;
+extern u16 D_80078EB2;
+extern s16 D_80078EB4;
+extern void func_8014BB0C(void);
+extern void func_8014BC0C(s32 a0, s32 a1);
+extern void func_8014BC44(s32 a0, s32 a1);
+extern void func_8014BCC0(s32 a0, s32 a1);
+extern u16 D_80078EB6;
+extern s32 func_8014BCEC(s32 a0, s32 a1);
+extern void func_8014BD60(s32 param_1, s32 param_2);
+extern void func_8014BD98(s32 a0, u16 a1);
+extern void func_8014BDC8(void);
+extern void func_8014BDE0(void);
+extern s32 func_8017267C(s32 *a0);
+extern void func_80029ED4(s32 a0);
+extern void func_8014BE78(void);
+extern void func_8014BE9C(void);
+extern void func_80029124(s32 a0, s32 a1);
+extern void func_8014BEC0(void);
+extern void func_8014BF18(s32 a0);
+extern void func_8014BF48(void);
+extern u8 func_8014BF6C(void);
+extern void func_8014BF8C(u8 arg0);
+extern void func_8014BFB0(void);
+extern u8 func_8014BFD4(void);
+extern void func_8014BFF4(s32 a0, s32 a1);
+extern void func_8014C010(s32 a0, s32 a1);
+extern s32 func_8014C050(s32 a0, s32 a1);
+extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2);
+extern s32 func_8014C118(void * a0, s32 a1, s32 a2);
+extern s32 func_8014C168(s32 * param_1, s32 param_2);
+extern void func_8014C1C8(s32 a0, s32 a1, void* a2);
+extern s32 func_80013328(s32 a0, s32 a1);
+extern s32 func_8014C59C(void *a0, void *a1);
+extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
+extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5);
+extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3);
+extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4);
+extern s32 aF8014C4AC();
+extern s32 func_8014C568(s16 *a0, s16 *a1);
+extern s32 ratan2(s32 dx, s32 dy);
+extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2);
+extern s16 func_8014C5D0(s32 a0, s32 a1);
+extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2);
+extern u8 D_80126D17;
+extern void func_8014C6AC(void);
+extern void func_8014C6C0(void);
+extern u8 D_80126D1E;
+extern void func_8014C6D0(void);
+extern void func_8014C6E0(void);
+extern void func_8014C6F4(u8 *a);
+extern s32 func_8014C860(s32 a0, s32 a1);
+extern void func_8014C8C8(s32 a0, s32 *a1);
+extern void func_8014C88C(s32 a0);
+extern void func_8014C8C8(s32 dst, s32 * src);
+extern void func_8014C8F0(s32 arg0);
+extern u8 D_801151F0[];
+extern s32 func_8014C918(s32 a0, s32 a1);
+extern s32 D_80126B50;
+extern void func_8014C968(void);
+extern s32 func_8014C98C(void);
+extern void func_80139914(s32 a0);
+extern s32 func_8014CA00(s32 a0);
+extern u16 func_8014CA70(s32 a0, s32 a1);
+extern s32 func_8014CA14(s32 a0, s32 a1);
+extern u16 func_8014CAE4(s32 *a0, s32 a1);
+extern s32 func_8014CA88(s32 *a0, s32 a1);
+extern s32 D_80126B9C;
+extern s32 func_8014CAFC(void);
+extern s32 func_8014CB0C(void);
+extern s32 func_8014CB1C(void);
+extern u8 D_80126D1F;
+extern s32 func_8014CB2C(void);
+extern s32 func_8014CB58(void);
+extern u8 D_80126D1D;
+extern void func_8014CB68(void);
+extern s32 func_8014CB8C(void);
+extern struct Packed8 D_80126C98;
+extern short D_80126C9E;
+extern void func_8014CB9C(struct Packed8 *a0);
+extern s32 D_80126CDC;
+extern void func_8014CBD8(void);
+extern void func_8014CBF8(void *a0);
+extern void func_8014D3E0(s32 a0);
+extern void func_8014D04C(void);
+extern void func_8014CCB4(void);
+extern void func_8014CC28(s32 a0);
+extern void func_8014CD0C(u8 *a0);
+extern s32 func_8014CF04(s32 a0, s32 a1, void *a2);
+extern int func_8014CD80(s32 a0, u16 *a1, u16 *a2);
+extern int func_80135A4C();
+extern int func_80135888();
+extern int func_8014C918();
+extern int func_8014CD80(int param_1, unsigned short *param_2, unsigned short *param_3);
+extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2);
+extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3);
+extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3);
+extern void func_8014D0A4(s32);
+extern s32 func_8014D2A0(s32 a0, void *a1, void *a2);
+extern s32 func_8014D12C();
+extern void func_8014D0A4(s32 a0);
+extern s32 func_8014D12C(s32 arg0, void *a1, void *a2);
+extern s32 func_8014D2A0(s32 arg0, void *a1, void *a2);
+extern s32 func_8014D610(s32 a0, s32 a1, u16 *a2);
+extern s32 func_8014D4C0(s32 a0, void *a1, void *a2);
+extern void func_8014D438(s32 a0);
+extern s32 func_8014D610(s32 param_1, s32 param_2, u16 *param_3);
+extern void func_8014D790(s32);
+extern void func_8014D738(void);
+extern s32 func_8014DD8C(s32 a0, void *a1, void *a2);
+extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2);
+extern void func_8014D790(s32 a0);
+extern void func_800139C8(s32 a0, void *a1, void *a2);
+extern s32 func_8014DCE0(s32 a0, s32 a1, s32 a2);
+extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2x);
+extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2);
+extern void func_8014DF94(s32);
+extern void func_8014DF3C(void);
+extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */
+extern void func_8014DF94(s32 arg0);
+extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */
+extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3);
+extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); /* canonical (engine_core.h:11555) */
+extern s32 func_8014E284(s32 a0, s16 *arg1, s16 *arg2);
+extern void func_8014E48C(s32);
+extern void func_8014E434(void);
+extern void func_8014E5B4(s32 a0, void *a1, void *a2);
+extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2);
+extern void func_8014E48C(s32 a0);
+extern s32 aF8014E5B4();
+extern void func_8014E6F8(struct SubE6F8*);
+extern void func_8014E6A0(void);
+extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2);
+extern void func_8014E6F8(struct SubE6F8 *a0);
+extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3);
+extern s32 func_8014E98C(void *a0);
+extern u16 D_800B99DA;
+extern s32 D_801150D8;
+extern s16 D_80126724;
+extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014ED80(struct SubED80 *a0);
+extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014F24C(struct SubF24C*);
+extern void func_8014F1F4(void);
+extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2);
+extern s32 func_8014F24C(struct SubF24C *a0);
+extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2);
+extern s32 func_8014F468(void);
+extern int func_8014F6F4(void);
+extern s32 func_8014F3E8(s32 param_1);
+extern int func_8014F74C();
+extern s32 D_801152BC;
+extern s32 func_8014F4C0(s32 arg0);
+extern int func_8014F74C(s32 arg0);
+extern s32 func_8014FA70(s32 a0);
+extern void func_8014FA04(s32 a0);
+extern s32 func_8014FC18(u8*);
+extern void func_8014FBC0(void);
+extern s32 func_8014FC18(u8 *self);
+extern int func_8014FD54(int);
+extern void func_8014FCFC(void);
+extern int func_8014FD54(int param_1);
+extern s32 func_80150170(void *a0);
+extern s32 func_8014FE60();
+extern s32 func_8014FE60(void *e);
+extern s32 func_80135D20(s32 a0, s32 a1, void *a2);
+extern s32 func_8014FFDC(s32 e, void *a1, void *a2);
+extern s32 func_80150150(s32 a, s32 b);
+extern s32 func_801502EC(s32 e, void *a1, void *a2);
+extern s32 func_80150460(s32 e, s32 a1);
+extern s32 func_80150170(void *e);
+extern s32 func_80150460(s32 a, s32 b);
+extern s32 func_80150528(void *a0, void *a1, void *a2);
+extern void func_801504D8(u16 *a0);
+extern s32 func_80150528(void *arg0, void *arg1, void *arg2);
+extern s32 func_801506A4();
+extern void func_80147324(s32 a0);
+extern s32 func_801506A4(s32 arg0, s32 arg1);
+extern void func_80150820(s32 a0, s32 a1);
+extern void func_8015086C(int param_1);
+extern s32 func_801508B4(s32 a0);
+extern s32 func_8015094C(s32 a0);
+extern s32 func_80021174(s32 a0, s32 a1);
+extern s32 func_8015094C(s32 param_1);
+extern void func_80150B28(int param_1);
+extern void func_80150B9C(void);
+extern s32 func_80151184(s32 a0, s32 a1, s32 a2);
+extern s32 func_80150BA4(s32 a0);
+extern s32 func_801619D0(void *a0);
+extern void func_80150BC8(s32 *a0);
+extern s32 func_80150480(s32 a0);
+extern u16 D_800AE6DC;
+extern void func_80150C48(s32 a0);
+extern int func_80151184(int arg, int a1, int a2);
+extern int func_80150CA0(int arg);
+extern void func_80150EC4(s32 a, s32 b);
+extern void func_80150CC4(s32 a);
+extern void func_80150CE4(s32 a);
+extern void func_80150D04(s32 a);
+extern void func_80150D24(s32 a);
+extern void func_80150D44(s32 a);
+extern void func_80150D64(s32 a);
+extern void func_80150D84(s32 a);
+extern void func_80150DA4(s32 a);
+extern void func_80150DC4(s32 a);
+extern void func_80150DE4(s32 a);
+extern void func_80150E04(s32 a);
+extern void func_80150E24(s32 a);
+extern void func_80150E44(s32 a);
+extern void func_80150EC4(s32 a0, s32 a1);
+extern void func_80150E64(s32 a0);
+extern void func_80150E84(s32 a0);
+extern void func_80150EA4(s32 a0);
+extern u8 D_800AE6C0;
+extern s16 D_800AE6C8;
+extern s16 D_800AE6CA;
+extern s16 D_800AE6CC;
+extern s32 D_800AE6C4;
+extern s16 D_800AE6CE;
+extern u8 D_800AE6BE;
+extern u8 D_801201F8[];
+extern void func_80150F78(void);
+extern void func_80150F80(s32 a0);
+extern int func_80150FB4(int arg);
+extern void func_80150FD8(s32 a0);
+extern int func_80151014(int arg);
+extern void func_80151038(s32 a0);
+extern int func_80151070(int arg);
+extern int func_80151094(int arg);
+extern void func_801510B8(void);
+extern void func_801510C0(void);
+extern int func_801510C8(int arg);
+extern int func_801510EC(int arg);
+extern s32 func_80151110(void);
+extern void func_80151130(void);
+extern int func_80151138(int arg);
+extern void func_8015115C(s32 *a0, s16 a1);
+extern s32 func_80151164(s32 a0, s32 a1);
+extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2);
+extern void func_801511A8(u8 *a0);
+extern void func_801511C4(u8 *a0);
+extern int func_80151204(int arg, int a1);
+extern int func_801511E0(int arg);
+extern int func_80151204(int a0, int a1);
+extern void func_80151238(void *a0);
+extern void func_8015126C(u16 *p);
+extern void func_80151664(void);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553C0(s32 a0);
+extern void func_80153C18(); /* fleet canon: K&R empty prototype (engine_core.h:75, :1682 defines it (void));
+extern * a prototyped (s32) decl is `conflicting types` in this TU. Arg still * passes in $a0 under default promotions -> codegen unchanged. */ void func_80151664(void);
+extern void func_80151780(s32 a0);
+extern void func_801516F0(s32 *a0);
+extern void func_8015173C(s32 *a0);
+extern s16 D_8011DB1A;
+extern s32 D_80127518;
+extern s32 D_801151FC;
+extern s32 func_801725CC(u8 *a0);
+extern s32 func_80029D3C(void);
+extern void func_80151878(void);
+extern void func_80153B58(s32 *a0);
+extern s32 func_80151880(s32 a0);
+extern s32 func_801518D8(s32 a0);
+extern void func_80151944(void *a0);
+extern s32 func_80151924(void);
+extern void func_8014E934(s32 a0);
+extern s32 func_8014F3E8(s32 a0);
+extern void func_801519C8(s32 a0);
+extern void func_80151980(s32 a0);
+extern M2C_UNK D_800D5880;
+extern s32 D_800D58AC;
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_801519C8(s32 arg0);
+extern void func_80151C54(s32 a0);
+extern void func_801542DC(s32 *a0, s32 a1);
+extern void func_8015BDD0(s32 *a0);
+extern void func_80165718(s32 a0);
+extern u8 D_800D46E4[];
+extern void func_80151AE4(s32 arg0);
+extern s32 func_801535F4(void *arg0);
+extern void func_8015BF48(s32 *a0);
+extern void func_80151B98(int param_1);
+extern void func_80153C18();
+extern void func_80151D24(void *a0);
+extern void func_80151DB0(s32 a0);
+extern void func_80151D60(void *a0);
+extern s32 func_80172630(u8 *a0);
+extern s32 D_80062C14;
+extern void func_80151DB0(s32 param_1);
+extern void func_80151E78(s32 *a0);
+extern void func_80151ECC(struct S80151ECC *a0);
+extern void func_80151FB4(s32 a0);
+extern void func_80151F38(s32 *a0);
+extern void func_80152058(void *a0);
+extern void func_801520DC(s32 a0);
+extern void func_80152094(s32 a0);
+extern void func_801520DC(s32 arg0);
+extern void func_801470B4(s32 a0);
+extern void func_8015369C(s32 a0);
+extern void func_80152194(s32 *a0);
+extern s32 func_801536DC(s32 a0);
+extern void func_8015220C(s32 a0);
+extern s32 func_80153800(s32 a0);
+extern void func_801522CC(s32 a0);
+extern void func_80152254(s32 *a0);
+extern void func_80152370(void *a0);
+extern void func_801523F4(s32 a0);
+extern void func_801523AC(s32 a0);
+extern void func_8001382C(s32 a0, void *a1, void *a2);
+extern void func_801523F4(s32 arg0);
+extern void func_801525F4(int);
+extern void func_80152500(int param_1);
+extern void func_801525F4(s32 a0);
+extern void func_80152698(void *a0);
+extern void func_80152714(s32 a0);
+extern void func_801526D4(s32 a0);
+extern void func_80152790(s32 a0);
+extern void func_8015282C(void *a0);
+extern void func_801528B0(s32 a0);
+extern void func_80152868(s32 a0);
+extern void func_801528B0(s32 arg0);
+extern void func_8015294C(s32 a0);
+extern void func_80152A08(s32 a0);
+extern void func_80152AC8(s32 a0);
+extern void func_80152A50(s32 *a0);
+extern void func_80152B6C(void *a0);
+extern void func_80152BF0(s32 a0);
+extern void func_80152BA8(s32 a0);
+extern void func_80152C80(s32 *a0);
+extern void func_80152C40(s32 *a0);
+extern void func_80152C80(s32* a0);
+extern void func_80152D24(void *a0);
+extern void func_80152DA8(s32 a0);
+extern void func_80152D60(s32 a0);
+extern void func_80152DA8(s32 arg0);
+extern void func_80152E4C(s32 a0);
+extern void func_80152EFC(s32 a0);
+extern void func_80152FBC(s32 a0);
+extern void func_80152F44(s32 *a0);
+extern void func_80153060(void *a0);
+extern void func_801530E4(s32 a0);
+extern void func_8015309C(s32 a0);
+extern void func_80155440(s32 *a0);
+extern u8 D_80062C04[];
+extern void func_801530E4(s32 arg0);
+extern void func_80153150(struct S80153150 *a0);
+extern void func_801531BC(s32 a0);
+extern void func_8015327C(s32 a0);
+extern void func_80153204(s32 *a0);
+extern void func_80153320(void *a0);
+extern void func_801533A4(s32 a0);
+extern void func_8015335C(s32 a0);
+extern void func_80153410(s32 *a0);
+extern void func_80153490(s32 a0);
+extern void func_80153550(s32 a0);
+extern void func_801534D8(s32 *a0);
+extern void func_8014ED28(s32 a0);
+extern void (*D_8011DB28)(s32 a0);
+extern s32 func_801536DC(s32 param_1);
+extern s32 func_80153978(s32 a0, u16 *src);
+extern s32 func_80133784(s32 a0, void *src, s32 dst);
+extern s32 func_801539F8(s32 a0, void *a1);
+extern s32 func_801539F8(s32 a0, void * a1);
+extern s32 func_8016DA04(s32 a0);
+extern s32 func_80153BD8(s32 a0);
+extern s32 func_80153BF0(s32 a0);
+extern void func_80153C18(void);
+extern u16 D_8011F748;
+extern void func_80153C30(void);
+extern void func_80153C74(s16 a0, s16 a1);
+extern s16 D_8011DB18;
+extern void func_80153C44(int a0, int a1, s16 a2);
+extern s16 D_8011DB0C;
+extern s32 D_80115210;
+extern void func_80153C8C(void);
+extern void func_80153C9C(void);
+extern s32 func_80153CBC(void);
+extern void func_80153CCC(S80153CCC *a0);
+extern void func_80153D7C(s32 a0);
+extern void func_80153D34(s32 a0);
+extern void func_80153D7C(s32 param_1);
+extern void func_8015410C(void);
+extern void func_80153E00(s32 param_1);
+extern void func_80154134(u8 *a0);
+extern void func_80154190(u8 *a0, s32 a1);
+extern void func_80154150(s32 a0, s32 a1);
+extern void func_80154218(u8 *a0, s32 a1, s32 a2);
+extern void func_801541D8(u8 *a0, s32 a1, s32 a2);
+extern s32 func_801549F8(s32 a0, s32 a1, s32 a2);
+extern void func_801542A4();
+extern void func_801542A4(s32 *a0, s32 a1);
+extern void func_8015430C();
+extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2);
+extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3);
+extern s32 func_80154358(void * arg0);
+extern void func_80154AB4(s32 a0, s32 a1);
+extern void func_80154B20(s32 a0, s32 a1, s32 a2);
+extern void func_80154AE0(s32 a0, s32 a1, s32 a2);
+extern void func_80154B7C(u8 *a0, s32 a1);
+extern void func_80154B4C(u8 *a0, s32 a1);
+extern void func_80154BC8(void *a0, s32 a1, s32 a2);
+extern void func_80154B98(void *a0, s32 a1, s32 a2);
+extern u8 D_800D8D10[];
+extern s16 D_80078E9E;
+extern void func_801550FC(s32 a0);
+extern void func_80154ED8(s32 a0, s32 a1);
+extern void func_80154F9C(s32 a0);
+extern void func_801550FC(s32 arg0);
+extern void func_8001D150(s32, s32);
+extern void func_8001D130(int, int);
+extern void func_80155150(int param_1);
+extern s32 D_800DE2A4[];
+extern void func_801552F4(s32 a0);
+extern void func_80155344(s32 a0);
+extern s32 func_80155394(s32 *a0);
+extern void func_801553A8(s32 *a0);
+extern s32 func_80155458(s32 param_1);
+extern s32 func_801659DC(u8 *a0);
+extern s32 func_801554B8(void *arg0);
+extern void func_801555F4(void *a0);
+extern void func_80155518(s32 *a0);
+extern void func_80155580(void *a0);
+extern s32 func_80161104(void);
+extern void func_801555F4(void *);
+extern void func_801555BC(void *a0);
+/* ==== end §8b carried decl layer ==== */
+
+
+extern s32 D_8011F730;
+extern s32 func_80029178(s32 arg);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146CA0(void *a0);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern void func_80147300(u16 arg0);
+extern void func_80147324(s32 a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553A8(s32 *a0);
+
+
+
+void func_801555F4(void *param_1)
+{
+ extern void func_80156648(int *a0);
+ extern int D_800D4C94;
+ extern int D_800D4CE4;
+ extern int D_800D4D38;
+ extern int D_800D4D88;
+ extern int D_800D4E10;
+ extern int D_800D4E6C;
+
+
+ int uVar1;
+ unsigned char bVar3;
+ int s1;
+ unsigned short uVar4;
+
+ ((void(*)(int, int))func_80154A74)(((int)param_1), 0x15);
+ if ((*(unsigned int *)(((int)param_1) + 0x44) & 0x200) == 0) {
+ if (*(int *)(((int)param_1) + 0x2c) == -0xb0000) {
+ uVar1 = ((int(*)(int))func_80029178)(0x82);
+ if ((uVar1 & 0xff) != 0) {
+ uVar1 = 7;
+ goto L_648;
+ }
+ }
+ } else {
+ uVar1 = 5;
+L_648:
+ *(unsigned char *)(((int)param_1) + 0x1aa) = uVar1;
+ }
+ switch (*(unsigned char *)(((int)param_1) + 0x1aa)) {
+ case 0:
+ case 1:
+ bVar3 = *(unsigned char *)(((int)param_1) + 0x1ab) ^ 1;
+ *(unsigned char *)(((int)param_1) + 0x1ab) = bVar3;
+ if (bVar3 != 0)
+ *(unsigned char *)(((int)param_1) + 0x1aa) = 0;
+ else
+ *(unsigned char *)(((int)param_1) + 0x1aa) = 1;
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4C94);
+ ((void(*)(int))func_80147324)(0x400);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 0;
+ D_8011F730 |= 3;
+ func_80146CA0((void *)((int)param_1));
+ goto L_7b8;
+ case 2:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4CE4);
+ ((void(*)(int))func_80147324)(0x446);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 1;
+ goto L_575c;
+ case 3:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4D38);
+ ((void(*)(int))func_80147324)(0x400);
+ ((void(*)(unsigned short))func_80147300)(0x5f3);
+ s1 = 2;
+ goto L_575c;
+ case 4:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4D88);
+ ((void(*)(unsigned short))func_80147300)(0x5f6);
+ s1 = 3;
+ func_80146CA0((void *)((int)param_1));
+L_575c:
+ func_80146CA0((void *)((int)param_1));
+ goto L_7b8;
+ case 5:
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4E10);
+ s1 = 4;
+ uVar4 = 7;
+ goto L_7b0;
+ case 7:
+ ((void(*)(int))func_80147324)(0x7f);
+ ((void(*)(unsigned short))func_80147300)(0x5f4);
+ ((void(*)(int *, int))func_80154274)((int *)((int)param_1), (int)&D_800D4E6C);
+ s1 = 6;
+ uVar4 = 8;
+L_7b0:
+ *(unsigned short *)(((int)param_1) + 2) = uVar4;
+ goto L_7b8;
+ default:
+ ;
+ }
+L_7b8:
+ ((void(*)(int *, int))func_80146E90)((int *)((int)param_1), 0);
+ func_80156648((int *)((int)param_1));
+ if (s1 >= 0) {
+ ((int(*)(int, int, int, int))func_80146994)(4, ((int)param_1), s1, 0);
+ }
+ ((void(*)(int *))func_801553A8)((int *)((int)param_1));
+}
+
+DEFINE_func_80155800() /* dedup: shared engine-core @0x80155800 (src/shared) */
+
+
+DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155a44 (src/shared) */
+
+
+DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155b20 (src/shared) */
+
+
+DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155b9c (src/shared) */
+
+
+DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155c0c (src/shared) */
+
+
+DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155c64 (src/shared) */
+
+
+DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155d70 (src/shared) */
+
+
+DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155e30 (src/shared) */
+
+
+DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155ea4 (src/shared) */
+
+
+void func_80155F58(void) {
+}
+
+DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155f60 (src/shared) */
+
+
+DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155f80 (src/shared) */
+
+
+DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155fb0 (src/shared) */
+
+
+DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155fd4 (src/shared) */
+
+
+DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155ff8 (src/shared) */
+
+
+
+void func_80156044(int param_1, int param_2)
+{
+ extern u32 func_8015616C(s32 a0, u16 a1);
+ extern void func_80156670(s32, s32, s32, s32, s32, u16);
+ extern void func_801567BC(s32 a0);
+ extern void func_80156848(s32, s32);
+ extern void func_80156A88(s32 a0, s32 a1);
+ extern s32 func_801565C0(void);
+ extern u8 D_801844D0;
+ extern u8 D_801844E4;
+ extern u8 D_80184368;
+
+ register s32 puVar2 __asm__("$2");
+ register s32 iVar3 __asm__("$3");
+ u8 *puVar4;
+ s32 uVar1;
+
+ if (((u32)param_2) & 0x10000) {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_801844D0;
+ } else if (((u32)param_2) & 0x20000) {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_801844E4;
+ } else {
+ iVar3 = (((u32)param_2) & 0xffff) * 0x14;
+ puVar2 = (s32)&D_80184368;
+ }
+ puVar4 = (u8 *)(iVar3 + puVar2);
+ uVar1 = func_8015616C(((s32)param_1), *(u16 *)puVar4) & 0xffff;
+ if (*(u8 *)(((s32)param_1) + 0x1a8) != 0) {
+ ((void (*)(s32, s32, s32, s32, s32, s32))func_80156670)(((s32)param_1), *(s32 *)puVar4, uVar1, *(s32 *)(puVar4 + 4),
+ *(u8 *)(puVar4 + 0xA), *(u16 *)(puVar4 + 0x12));
+ if (*(u8 *)(puVar4 + 0x10) != 0) {
+ func_801567BC(((s32)param_1));
+ }
+ ((void (*)(s32, s32, s32))func_80156848)(((s32)param_1), (s32)puVar4, uVar1);
+ func_80156A88(((s32)param_1), (s32)puVar4);
+ if (((s32 (*)(s32))func_801565C0)(((s32)param_1)) != 0) {
+ *(u8 *)(((s32)param_1) + 0x1c0) = 1;
+ }
+ }
+}
+
+
+DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616c (src/shared) */
+
+
+DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */
+
+
+
+
+S801563EC *func_801563EC(u16 idx) {
+
+ extern S801563EC D_8018450C[];
+ return &D_8018450C[idx];
+}
+
+
+DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640c (src/shared) */
+
+
+DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564b0 (src/shared) */
+
+
+DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565c0 (src/shared) */
+
+
+DEFINE_func_80156600() /* dedup: shared engine-core @0x80156600 (src/shared) */
+
+DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */
+
+
+
+DEFINE_func_80156670() /* dedup: shared engine-core @0x80156670 (src/shared) */
+
+
+DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567bc (src/shared) */
+
+
+DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */
+
+
+DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156a14 (src/shared) */
+
+
+
+// @class: struct
+// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018477C indexed halfword folds %lo
+extern void func_80147324(s32 arg0);
+
+void func_80156A1C(s32 param_1, s32 param_2)
+{
+
+ extern unsigned char D_8011520C[];
+ extern unsigned short D_8018477C[];
+ if (*(unsigned char *)(param_1 + 0xDA) == 0) {
+ func_80147324(D_8018477C[D_8011520C[param_2]]);
+ *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1;
+ }
+}
+
+
+DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156a88 (src/shared) */
+
+
+DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156b74 (src/shared) */
+
+
+DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ecc (src/shared) */
+
+
+DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156fa8 (src/shared) */
+
+
+DEFINE_func_80157158() /* dedup: shared engine-core @0x80157158 (src/shared) */
+
+
+DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571c4 (src/shared) */
+
+
+DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574dc (src/shared) */
+
+
+DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */
+
+
+
+
+void func_80157544(void *a0) {
+
+ extern void (*D_8018478C[])(void);
+ D_8018478C[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */
+
+
+DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575e4 (src/shared) */
+
+
+DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576a8 (src/shared) */
+
+
+DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771c (src/shared) */
+
+
+DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773c (src/shared) */
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across)
+
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_801578C0(s32 a0);
+
+void func_80157788(int param_1)
+{
+
+ extern int D_8019A8D8;
+ D_8019A8D8 = 300;
+ ((void (*)(int, int))func_80147078)(param_1, 7);
+ func_801578C0(param_1);
+}
+
+
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80157808(s32 *a0);
+
+void func_801577C8(s32 *a0)
+{
+ /* [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_8019A8D8;
+ D_8019A8D8 = 0x12C;
+ func_80147078(a0, 0x7);
+ func_80157808(a0);
+}
+
+
+INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801555F4", func_80157808);
+
+DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274
+
+extern void func_80156648(s32 *a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_80147324(s32 arg0);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80146CA0(void *a0);
+extern s32 func_801725A4(u8 *a0);
+
+void func_801578C0(s32 param_1)
+{
+
+ extern u8 D_800D5128;
+ extern u8 D_80184794;
+ ((void (*)(void))func_80156648)();
+ *(u8 *)(param_1 + 0x1AA) = 9;
+ func_80154274((s32 *)param_1, (s32)&D_800D5128);
+ ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15);
+ func_80147324(0xC20);
+ ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184794);
+ ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0);
+ ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0);
+ ((void (*)(s32 *))func_80146CA0)((s32 *)param_1);
+ ((void (*)(s32 *))func_801725A4)((s32 *)param_1);
+}
+
+
+
+// @class: other
+// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only
+// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves
+// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT
+// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16
+// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH.
+
+extern void func_80147A10(int a0, int a1);
+extern void func_80147A84(int);
+extern void func_801473EC(s32 *a0);
+extern void func_80148038(int, int);
+extern void func_80147460(int);
+extern void func_8014ED28(s32 _arg0);
+extern void func_80146D90(int);
+extern void func_80161450(void *a0);
+extern void func_80157A8C(int);
+extern void func_80146E90(s32 *a0, s32 a1);
+extern void func_80146CA0(void *a0);
+extern int func_80155FF8(int arg, int a1);
+extern void func_80154A74(int, int);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern s32 func_801725A4(u8 *a0);
+
+
+void func_8015795C(int param_1)
+{
+
+ extern unsigned char D_800D5178;
+ extern unsigned char D_801847A4;
+ int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */
+ int iVar1;
+ unsigned int uVar2;
+
+ *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2;
+ ((int (*)(int, int))func_80147A10)(param_1, 0x400);
+ if (*(int *)(param_1 + 0x2c) >= 0) {
+ *(int *)(param_1 + 0x2c) = 0;
+ }
+ func_80147A84(param_1);
+ ((void (*)(int))func_801473EC)(param_1);
+ func_80148038(param_1, 0x1a000);
+ func_80147460(param_1);
+ iVar1 = ((int (*)(int))func_8014ED28)(param_1);
+ if (iVar1 != 0) {
+ func_80146D90(param_1);
+ }
+ uVar2 = ((int (*)(int))func_80161450)(param_1);
+ if ((uVar2 & 5) != 0) {
+ func_80157A8C(param_1);
+ ((void (*)(int, int))func_80146E90)(param_1, 8);
+ ((void (*)(int))func_80146CA0)(param_1);
+ }
+ if (uVar2 == 0) {
+ ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa));
+ if (*(unsigned char *)(param_1 + 0x1c0) != 0) {
+ func_80154A74(param_1, 0x17);
+ ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178);
+ ((void (*)(int, void *))func_80146DB8)(param_1, &D_801847A4);
+ ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000);
+ *(short *)(param_1 + 2) = 4;
+ }
+ ((void (*)(int))func_801725A4)(param_1);
+ }
+ return;
+}
+
+
+DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157a8c (src/shared) */
+
+
+DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157ac8 (src/shared) */
+
+
+DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157b74 (src/shared) */
+
+
+DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157bc8 (src/shared) */
+
+
+DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157ccc (src/shared) */
+
+
+
+/* func_80157D20 — 21-ins plumbing shim (×138 overlays).
+ *
+ * §71 sibling-first: the immediate neighbour func_801578C0 in this very TU
+ * (src/ov_SC01_077/ov_SC01_077_jr_80154C24.c L1592) already matches with
+ * `((void (*)(void))func_80156648)();` — the zero-argument call form. The
+ * target likewise sets up NO argument registers before `jal func_80156648`
+ * ($a0/$a1 still carry this function's own incoming args), so the call is
+ * argument-less here too.
+ *
+ * The `lhu %lo(D_801847E4)($at)` with `sll $s0,$s0,1` => a plain u16 array
+ * indexed by the second parameter, NOT hoisted into a pointer (§20: a pointer
+ * var would keep one address register live across the call; the target rebuilds
+ * the %hi/%lo pair inline after the call returns).
+ *
+ * §73 PARAMS axis / §42 lever 6 — the fleet canon for this symbol is
+ * `extern void func_80157D20(void);` (this TU's carried decl layer, L399, and
+ * every sibling overlay's). A 2-param definition hard-errors with
+ * `conflicting types` in the real TU (rtu_match, byte-verified), and the canon
+ * cannot be widened from a draft (that is an R22 fleet edit). So keep the
+ * `(void)` signature and capture $a0/$a1 with register pins copied into NORMAL
+ * pseudos — the copies are live across `jal func_80156648`, so they get the
+ * callee-saved homes the target uses ($s1 = a0, $s0 = a1). A direct
+ * `register` use would leave the values in call-clobbered $a0/$a1.
+ */
+
+extern void func_80156648(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80157D74(u16 *a0);
+
+void func_80157D20(void)
+{
+
+ extern u16 D_801847E4[];
+ register void *a0v __asm__("$4");
+ register s32 a1v __asm__("$5");
+ void *param_1 = a0v;
+ s32 param_2 = a1v;
+
+ ((void (*)(void))func_80156648)();
+ ((void (*)(void *, s32))func_80147078)(param_1, D_801847E4[param_2]);
+ ((void (*)(void *))func_80157D74)(param_1);
+}
+
+
+DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157d74 (src/shared) */
+
+
+
+
+void func_80157DC4(void *a0) {
+
+ extern void (*D_801847F4[])(void);
+ D_801847F4[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157e00 (src/shared) */
+
+
+DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157e38 (src/shared) */
+
+
+DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157ea4 (src/shared) */
+
+
+DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157f64 (src/shared) */
+
+
+
+
+void func_80157FC4(void *a0) {
+
+ extern void (*D_801847FC[])(void);
+ D_801847FC[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots
+
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_80147324(s32 arg0);
+extern void func_80146CA0(void *a0);
+
+
+void func_80158038(void * param)
+{
+
+ extern s32 D_800D51E0;
+ extern s32 D_801847C8;
+ *(u8 *)(param + 0x1aa) = 0xe;
+ func_80154274((s32 *)param, (s32)&D_800D51E0);
+ func_80154A74(param, 0x15);
+ func_80146DB8((s32 *)param, &D_801847C8);
+ *(s32 *)(param + 0x234) = 0;
+ func_80146994(5, param, 0xc, 0);
+ func_80147324(0x455);
+ func_80146CA0((void *)param);
+}
+
+
+DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580b4 (src/shared) */
+
+
+DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581ac (src/shared) */
+
+
+
+
+void func_8015824C(void *a0) {
+
+ extern void (*D_80184808[])(void);
+ D_80184808[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */
+
+
+DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582c0 (src/shared) */
+
+
+DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */
+
+
+
+// @class: other
+// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code)
+
+extern void func_8014CBF8(void *a0);
+extern void func_801474EC(s32 *a0);
+extern void func_801477E8(s32 *a0, s32 a1);
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80148038(s32 a0, s32 a1);
+extern void func_80147460(s32 a0);
+extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
+extern void func_801473EC(s32 *a0);
+extern s32 func_801615C4(void *a0, s32 a1);
+extern s32 func_80146E98(s32 a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80146CA0(void *a0);
+extern int func_80155FF8(int arg, int a1);
+
+
+void func_80158434(s32 param_1)
+{
+
+ extern u8 D_801847D8;
+ extern u8 D_800D533C;
+ u32 uVar1;
+ u32 uVar2;
+ s32 frame_pad[4];
+ (void)&frame_pad;
+
+ *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2;
+ if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) {
+ *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1;
+ ((s32 (*)(void))func_8014CBF8)();
+ ((void (*)(s32))func_801474EC)(param_1);
+ ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000);
+ ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801847D8);
+ }
+ if (*(s32 *)(param_1 + 0x234) != 0) {
+ func_80148038(param_1, 0x10000);
+ func_80147460(param_1);
+ func_80147AD4(param_1, 0, 0, 0);
+ ((void (*)(s32))func_801473EC)(param_1);
+ }
+ uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0);
+ if (uVar1 != 0) {
+ if (uVar1 == 1) goto LAB_80158508;
+ uVar2 = uVar1 & 0x2000;
+ } else {
+ uVar2 = func_80146E98(param_1);
+ }
+ if (uVar2 == 0) goto LAB_80158528;
+LAB_80158508:
+ ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C);
+ ((void (*)(s32))func_80146CA0)(param_1);
+ return;
+LAB_80158528:
+ ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA));
+}
+
+
+DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */
+
+
+DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585a4 (src/shared) */
+
+
+DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585ac (src/shared) */
+
+
+DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585ec (src/shared) */
+
+
+
+// @class: loose-typing
+// @stuck: none — MATCH (87 ins, match_one) + symcheck SYMS-OK (17 symbols agree); same file also
+// MATCHes verbatim against ov_SC03_099 and ov_SC06_008 (sibling asm bodies are identical)
+
+/* func_80158638 @ 0x80158638 — ov_SC01_077 / ov_SC01_077_jr_80154C24 (87 ins).
+ *
+ * TWO decl-ROBUSTNESS choices in the BODY, deliberate — these are the only two things the gate's
+ * decl ladder (cast_call_sites/reconcile_tu/sig_unify) CANNOT repair, because they change codegen,
+ * not plumbing. Both are load-bearing for templating this exemplar onto its 138 h_seq siblings,
+ * where each overlay TU carries its own spelling of these decls:
+ *
+ * 1) `*(u16 *)&D_80078EB4` — the target loads it with `lhu`. The ov_SC01_077 TU already carries
+ * `extern s16 D_80078EB4;` (line 504), and a plain `D_80078EB4 != 0` read through an s16 decl
+ * compiles to `lh` => WIDTH/lh!=lhu, closeness 1. A `(u16)` cast does NOT fix it (gcc-2.7.2
+ * folds the zero_extend away for a !=0 test and keeps `lh`); the pointer pun does, and it is
+ * correct under EITHER declared signedness.
+ * 2) `(s16)func_80159464(...)` with the fleet-canonical `extern s32 func_80159464();` decl.
+ * The target truncates the return to 16 bits at BOTH call sites (`sll 16` + `blez`, then
+ * `sll 16`/`sra 16`/`slti 6`). Declaring the callee `s16` also matches, but the fleet's carried
+ * decl layer spells it `extern s32 func_80159464(void);` in 1600 places — if reconcile_tu wins
+ * that conflict the truncation vanishes and the match dies. The explicit cast makes the body
+ * independent of which decl survives.
+ *
+ * Symbols verified present in build/ov_SC01_077/undefined_syms_auto.txt:
+ * D_80078EB4=0x80078EB4 D_800B9A17=0x800B9A17 D_800B9A64=0x800B9A64 D_80110EC0=0x80110EC0
+ */
+
+
+DEFINE_func_80158638() /* dedup: shared engine-core @0x80158638 (src/shared) */
+
+
+void func_80158794(void) {
+}
+
+
+// @class: plumbing
+// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order)
+
+extern void func_80147084(s32 *a0);
+extern void func_80147098(s32 *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern void func_80158880(s32 *param);
+
+void func_8015879C(s32 param_1) {
+
+ extern s32 D_8019A8E0;
+ extern s32 D_8019A8EC;
+ extern s32 D_8019A8F0;
+ D_8019A8E0 = 0;
+ D_8019A8EC = 1;
+ D_8019A8F0 = 0;
+ *(u8 *)(param_1 + 0xa8) = 0;
+ ((void (*)(void))func_80147084)();
+ ((void (*)(s32))func_80147098)(param_1);
+ ((void (*)(s32))func_801470AC)(param_1);
+ ((void (*)(s32, s32))func_80147078)(param_1, 0x1a);
+ ((void (*)(s32, s32))func_80146C98)(param_1, 1);
+ ((void (*)(s32))func_80158880)(param_1);
+}
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order)
+
+extern void func_80147084(s32 *a0);
+extern void func_80147098(s32 *a0);
+extern void func_801470AC(s32 *a0);
+extern void func_80147078(s32 *a0, s16 a1);
+extern void func_80158880(s32 *param);
+
+void func_80158814(void *arg0) {
+
+ extern s32 D_8019A8E0;
+ extern s32 D_8019A8EC;
+ extern s32 D_8019A8F0;
+ D_8019A8E0 = 0;
+ D_8019A8EC = 1;
+ D_8019A8F0 = 0;
+ *(s8 *)((s32)arg0 + 0xA8) = 0;
+ ((void (*)(void))func_80147084)();
+ ((void (*)(void *))func_80147098)(arg0);
+ ((void (*)(void *))func_801470AC)(arg0);
+ ((void (*)(void *, s32))func_80147078)(arg0, 0x1A);
+ ((void (*)(void *))func_80158880)(arg0);
+}
+
+
+
+extern void func_80149020(s32 *a0);
+
+void func_80158880(s32 *param) {
+
+ extern void (*D_80184844[])(s32 *);
+ func_80149020(param);
+ D_80184844[*(u8 *)((s32)param + 0x4F)](param);
+}
+
+
+INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801555F4", func_801588CC);
+
+DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158ab4 (src/shared) */
+
+
+DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158ae4 (src/shared) */
+
+
+
+extern void func_80146CA0(void *a0);
+extern s32 func_801472C8(struct S *a0);
+extern void func_80147324(s32 a0);
+extern void func_801474D8(s32 *a0);
+extern void func_801474EC(s32 *a0);
+extern void func_80154274(s32 *a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+
+void func_80158BB0(void *arg0) {
+
+ extern M2C_UNK D_800D58D8;
+ extern s32 D_8019A8E0;
+ if (D_8019A8E0 == 0) {
+ D_8019A8E0 = 1;
+ }
+ func_80147324(0x456);
+ func_80154274(arg0, &D_800D58D8);
+ func_80154A74(arg0, 0x16);
+ M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000;
+ M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0;
+ func_801474EC(arg0);
+ func_801474D8(arg0);
+ func_801472C8(arg0);
+ func_80146CA0(arg0);
+}
+
+
+DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158c40 (src/shared) */
+
+
+DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158cd8 (src/shared) */
+
+
+DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158d60 (src/shared) */
+
+
+DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158e24 (src/shared) */
+
+
+
+// @class: other
+// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot)
+
+
+extern int rand(void);
+extern s32 func_8013767C(s32 a0);
+extern void func_80146CA0(void *a0);
+
+void func_80158F00(int param_1) {
+
+ extern s32 D_8019A8EC;
+ extern s32 D_80184818[];
+ int *self = (int *)param_1;
+ struct Actor *act = (struct Actor *)self[0x20 / 4];
+ int gate = D_8019A8EC;
+
+ act->timer = (u16)((act->timer + 0x16) & 0xfff);
+
+ if (gate == 0) {
+ s32 r = rand();
+ *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184818[r % 0xb]);
+ ((void (*)(int))func_80146CA0)(param_1);
+ }
+}
+
+
+
+// @class: plumbing
+// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464
+// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used
+// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz
+// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C);
+// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg.
+
+
+extern u16 func_80148800(s32 *a0);
+extern s32 func_801399F0(s32);
+extern void func_80139914(s32);
+extern s32 func_80159464(void);
+extern void func_801594E8(s32, s32);
+extern void func_80146C98(s32 *a0, s16 a1);
+extern s32 func_8013767C(s32 a0);
+extern void func_80146CA0(void *a0);
+
+void func_80158FA4(s32 param_1)
+{
+
+ extern s32 D_8019A8F0;
+ extern u8 D_80110C3C[];
+ s32 v0;
+ s16 sVar1;
+
+ v0 = *(s32 *)(param_1 + 0x20);
+ *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff;
+ if (((s32 (*)(void))func_80148800)() & 0xf0) {
+ D_8019A8F0 = 1;
+ }
+ if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) {
+ func_80139914(*(s32 *)(param_1 + 0x198));
+ *(s32 *)(param_1 + 0x198) = 0;
+ sVar1 = ((s32 (*)(s32))func_80159464)(param_1);
+ if (sVar1 != 0) {
+ func_801594E8(param_1, sVar1);
+ ((void (*)(s32, s32))func_80146C98)(param_1, 0xc);
+ } else {
+ *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C));
+ ((void (*)(s32))func_80146CA0)(param_1);
+ }
+ }
+}
+
+
+DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */
+
+
+DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */
+
+
+DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592cc (src/shared) */
+
+
+
+extern void func_80145BF8(void);
+extern void func_80146CA0(void *a0);
+
+void func_8015934C(void *arg0) {
+
+ extern u8 D_800AE6BD;
+ extern s32 D_8019A8E0;
+ extern s32 D_8019A8E8;
+ void *temp_v1;
+
+ if (D_8019A8E0 == 4) {
+ D_8019A8E0 = 5;
+ }
+ if (D_8019A8E8 != 0) {
+ func_80145BF8();
+ func_80146CA0(arg0);
+ D_800AE6BD += 1;
+ }
+ temp_v1 = M2C_FIELD(arg0, void **, 0x20);
+ M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF);
+}
+
+
+DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593e4 (src/shared) */
+
+
+DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */
+
+
+DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */
+
+
+
+extern s16 currentLocationId;
+extern s32 func_80029A94(s32);
+
+
+s32 func_80159464(void) {
+
+ extern Entry D_80184880[];
+ Entry *e;
+
+ e = D_80184880;
+ while (e->id != 0) {
+ if (currentLocationId == e->id) {
+ return e->val;
+ }
+ e++;
+ }
+ if (func_80029A94(1) != 0) {
+ goto ret0;
+ }
+ if (func_80029A94(0) != 0) {
+ goto ret0;
+ }
+ return -1;
+ret0:
+ return 0;
+}
+
+
+INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801555F4", func_801594E8);
+
+
+
+void func_80159698(void *a0) {
+
+ extern void (*D_80184A94[])(void);
+ D_80184A94[*(u8 *)((s32)a0 + 0x15)]();
+}
+
+
+DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596d4 (src/shared) */
+
+
+
+// @class: iv-combine
+// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8;
+// p gcc emits the
+// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a
+// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual
+// guarded do-while `if(base+0x2A8= ab + 0x22) {
+ *q |= orc;
+ }
+ q += 0x21;
+ } while (q < (u32 *)(base + 0x65AC));
+ }
+
+ (*(s16 *)&D_801270C0) = 3;
+ ((void (*)(s32))func_80129248)(0);
+ func_8013C938();
+ func_8013CB20();
+ func_8013C98C();
+ func_8002850C(0x800, 0x800, 0x800);
+ func_80028620(0, &(*(u8 *)&D_801848B4));
+ func_80028620(1, &(*(u8 *)&D_801848B4) + 0x10);
+ func_80028620(2, &(*(u8 *)&D_801848B4) + 0x20);
+ *(s32 *)(param_1 + 0x28) = 0xff;
+ *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
+ }
+ return 0;
+}
+
+
+DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */
+
+
+DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987c (src/shared) */
+
+
+DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598bc (src/shared) */
+
+
+DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598e0 (src/shared) */
+
+
+
+
+void func_80159968(void *a0) {
+
+ extern void (*D_80184B38[])(void);
+ D_80184B38[*(u8 *)((s32)a0 + 0x4D)]();
+}
+
+
+
+
+void func_801599A4(void *a0) {
+
+ extern void (*D_80184B44[])(void);
+ D_80184B44[*(u16 *)((s32)a0 + 0x0)]();
+}
+
+
+DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599e0 (src/shared) */
+
+
+void func_80159A18(void) {
+}
+
+INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801555F4", func_80159A20);
+
+DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159b08 (src/shared) */
+
+
+DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159b3c (src/shared) */
+
+
+
+
+void func_80159B70(void *a0) {
+
+ extern void (*D_80184C8C[])(void);
+ D_80184C8C[*(u16 *)((s32)a0 + 0x2)]();
+}
+
+
+DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159bac (src/shared) */
+
+
+
+// @class: schedule
+// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a
+// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm
+// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch
+// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`.
+
+extern void func_80146DB8(s32 *a0, s32 *a1);
+extern void func_80154150(s32 a0, s32 a1);
+extern void func_80154A74(s32 a0, s32 a1);
+extern void func_801553C0(s32 a0);
+extern void func_801553A8(s32 *a0);
+extern s32 func_80172590(u8 *a0);
+extern void func_80146CA0(void *a0);
+
+
+void func_80159BE4(s32 arg0)
+{
+
+ extern unsigned char D_80184AA8;
+ int v;
+
+ ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184AA8);
+ if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) {
+ func_80154150(arg0, 5);
+ func_80154A74(arg0, 0x1C);
+ } else {
+ func_80154150(arg0, 4);
+ func_80154A74(arg0, 0x11);
+ }
+ *(int *)(arg0 + 0x234) = 0;
+ *(int *)(arg0 + 0x238) = 0;
+ func_801553C0(arg0);
+ ((void (*)(int))func_801553A8)(arg0);
+ ((void (*)(int))func_80172590)(arg0);
+ ((void (*)(int))func_80146CA0)(arg0);
+}
+