From e4471fd039eff5eea878fd9fd964ac52e53a3218 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 11 Aug 2026 18:38:06 -0600 Subject: [PATCH] feat(phase-30 S48-T6): propagate func_80188E1C to its zero-crack siblings --- config/overlays.mk | 8 +- config/splat.ov_SC03_001.yaml | 3 + config/splat.ov_SC03_124.yaml | 3 + config/splat.ov_SC04_019.yaml | 3 + config/splat.ov_SC05_017.yaml | 3 + src/ov_SC03_001/ov_SC03_001_jr_8018A3A8.c | 511 --- src/ov_SC03_001/ov_SC03_001_jr_8018B8DC.c | 3860 +++++++++++++++++ src/ov_SC03_124/ov_SC03_124_jr_80187010.c | 567 --- src/ov_SC03_124/ov_SC03_124_jr_80188544.c | 3752 +++++++++++++++++ src/ov_SC04_019/ov_SC04_019_jr_801878E8.c | 1221 ------ src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c | 4441 ++++++++++++++++++++ src/ov_SC05_017/ov_SC05_017_jr_801875E8.c | 1407 ------- src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c | 4590 +++++++++++++++++++++ 13 files changed, 16659 insertions(+), 3710 deletions(-) create mode 100644 src/ov_SC03_001/ov_SC03_001_jr_8018B8DC.c create mode 100644 src/ov_SC03_124/ov_SC03_124_jr_80188544.c create mode 100644 src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c create mode 100644 src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c diff --git a/config/overlays.mk b/config/overlays.mk index e51c27a5a0..ddf92c3fb0 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -129,7 +129,7 @@ ov_SC03_001_ELF := $(ov_SC03_001_OUT).elf ov_SC03_001_MAPFILE := $(ov_SC03_001_OUT).map ov_SC03_001_LD_SCRIPT := $(ov_SC03_001_OUT).ld ov_SC03_001_SPLAT_YAML := config/splat.ov_SC03_001.yaml -ov_SC03_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_001.o,ov_SC03_001_jr_8012ACE0.o,tail2.data.o,ov_SC03_001_jr_80135888.o,tail3.data.o,ov_SC03_001_jr_80135A4C.o,tail4.data.o,ov_SC03_001_jr_80135D20.o,tail5.data.o,ov_SC03_001_jr_801380E0.o,ov_SC03_001_o0c.o,tail6.data.o,ov_SC03_001_jr_8013F350.o,tail7.data.o,ov_SC03_001_jr_8013FFD8.o,tail8.data.o,ov_SC03_001_jr_80140608.o,tail9.data.o,ov_SC03_001_jr_8015444C.o,ov_SC03_001_jr_80154C24.o,ov_SC03_001_jr_801588CC.o,ov_SC03_001_jr_80159C84.o,tail10.data.o,ov_SC03_001_jr_8015A3C8.o,tail11.data.o,ov_SC03_001_jr_8015AE2C.o,tail12.data.o,ov_SC03_001_jr_8015C32C.o,tail13.data.o,ov_SC03_001_jr_8016AB6C.o,tail14.data.o,ov_SC03_001_jr_80171B4C.o,ov_SC03_001_jr_801734BC.o,tail15.data.o,ov_SC03_001_jr_801789AC.o,ov_SC03_001_jr_80178D40.o,tail16.data.o,ov_SC03_001_jr_8017A4AC.o,tail17.data.o,ov_SC03_001_jr_8017AE2C.o,tail18.data.o,ov_SC03_001_jr_80188830.o,tail19.data.o,ov_SC03_001_jr_80189030.o,tail20.data.o,ov_SC03_001_jr_8018A3A8.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_001.o,ov_SC03_001_jr_8012ACE0.o,tail2.data.o,ov_SC03_001_jr_80135888.o,tail3.data.o,ov_SC03_001_jr_80135A4C.o,tail4.data.o,ov_SC03_001_jr_80135D20.o,tail5.data.o,ov_SC03_001_jr_801380E0.o,ov_SC03_001_o0c.o,tail6.data.o,ov_SC03_001_jr_8013F350.o,tail7.data.o,ov_SC03_001_jr_8013FFD8.o,tail8.data.o,ov_SC03_001_jr_80140608.o,tail9.data.o,ov_SC03_001_jr_8015444C.o,ov_SC03_001_jr_80154C24.o,ov_SC03_001_jr_801588CC.o,ov_SC03_001_jr_80159C84.o,tail10.data.o,ov_SC03_001_jr_8015A3C8.o,tail11.data.o,ov_SC03_001_jr_8015AE2C.o,tail12.data.o,ov_SC03_001_jr_8015C32C.o,tail13.data.o,ov_SC03_001_jr_8016AB6C.o,tail14.data.o,ov_SC03_001_jr_80171B4C.o,ov_SC03_001_jr_801734BC.o,tail15.data.o,ov_SC03_001_jr_801789AC.o,ov_SC03_001_jr_80178D40.o,tail16.data.o,ov_SC03_001_jr_8017A4AC.o,tail17.data.o,ov_SC03_001_jr_8017AE2C.o,tail18.data.o,ov_SC03_001_jr_80188830.o,tail19.data.o,ov_SC03_001_jr_80189030.o,tail20.data.o,ov_SC03_001_jr_8018A3A8.o,tail21.data.o,ov_SC03_001_jr_8018B8DC.o,tail22.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_001/ov_SC03_001.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC03_001/ov_SC03_001_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC03_001/ov_SC03_001_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -452,7 +452,7 @@ ov_SC04_019_ELF := $(ov_SC04_019_OUT).elf ov_SC04_019_MAPFILE := $(ov_SC04_019_OUT).map ov_SC04_019_LD_SCRIPT := $(ov_SC04_019_OUT).ld ov_SC04_019_SPLAT_YAML := config/splat.ov_SC04_019.yaml -ov_SC04_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_019.o,ov_SC04_019_jr_8012ACE0.o,tail2.data.o,ov_SC04_019_jr_80135888.o,tail3.data.o,ov_SC04_019_jr_80135A4C.o,tail4.data.o,ov_SC04_019_jr_80135D20.o,tail5.data.o,ov_SC04_019_jr_801380E0.o,ov_SC04_019_o0c.o,tail6.data.o,ov_SC04_019_jr_8013F350.o,tail7.data.o,ov_SC04_019_jr_8013FFD8.o,tail8.data.o,ov_SC04_019_jr_80140608.o,tail9.data.o,ov_SC04_019_jr_8015444C.o,ov_SC04_019_jr_80154C24.o,ov_SC04_019_jr_801588CC.o,ov_SC04_019_jr_80159C84.o,tail10.data.o,ov_SC04_019_jr_8015A3C8.o,tail11.data.o,ov_SC04_019_jr_8015AE2C.o,tail12.data.o,ov_SC04_019_jr_8015C32C.o,tail13.data.o,ov_SC04_019_jr_8016AB6C.o,tail14.data.o,ov_SC04_019_jr_80171B4C.o,ov_SC04_019_jr_801734BC.o,tail15.data.o,ov_SC04_019_jr_801789AC.o,ov_SC04_019_jr_80178D40.o,tail16.data.o,ov_SC04_019_jr_8017A4AC.o,tail17.data.o,ov_SC04_019_jr_8017AE2C.o,tail18.data.o,ov_SC04_019_jr_80185D70.o,tail19.data.o,ov_SC04_019_jr_801878E8.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_019.o,ov_SC04_019_jr_8012ACE0.o,tail2.data.o,ov_SC04_019_jr_80135888.o,tail3.data.o,ov_SC04_019_jr_80135A4C.o,tail4.data.o,ov_SC04_019_jr_80135D20.o,tail5.data.o,ov_SC04_019_jr_801380E0.o,ov_SC04_019_o0c.o,tail6.data.o,ov_SC04_019_jr_8013F350.o,tail7.data.o,ov_SC04_019_jr_8013FFD8.o,tail8.data.o,ov_SC04_019_jr_80140608.o,tail9.data.o,ov_SC04_019_jr_8015444C.o,ov_SC04_019_jr_80154C24.o,ov_SC04_019_jr_801588CC.o,ov_SC04_019_jr_80159C84.o,tail10.data.o,ov_SC04_019_jr_8015A3C8.o,tail11.data.o,ov_SC04_019_jr_8015AE2C.o,tail12.data.o,ov_SC04_019_jr_8015C32C.o,tail13.data.o,ov_SC04_019_jr_8016AB6C.o,tail14.data.o,ov_SC04_019_jr_80171B4C.o,ov_SC04_019_jr_801734BC.o,tail15.data.o,ov_SC04_019_jr_801789AC.o,ov_SC04_019_jr_80178D40.o,tail16.data.o,ov_SC04_019_jr_8017A4AC.o,tail17.data.o,ov_SC04_019_jr_8017AE2C.o,tail18.data.o,ov_SC04_019_jr_80185D70.o,tail19.data.o,ov_SC04_019_jr_801878E8.o,tail20.data.o,ov_SC04_019_jr_80188E1C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC04_019/ov_SC04_019.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC04_019/ov_SC04_019_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC04_019/ov_SC04_019_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -2864,7 +2864,7 @@ ov_SC03_124_ELF := $(ov_SC03_124_OUT).elf ov_SC03_124_MAPFILE := $(ov_SC03_124_OUT).map ov_SC03_124_LD_SCRIPT := $(ov_SC03_124_OUT).ld ov_SC03_124_SPLAT_YAML := config/splat.ov_SC03_124.yaml -ov_SC03_124_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_124.o,ov_SC03_124_jr_8012ACE0.o,tail2.data.o,ov_SC03_124_jr_80135888.o,tail3.data.o,ov_SC03_124_jr_80135A4C.o,tail4.data.o,ov_SC03_124_jr_80135D20.o,tail5.data.o,ov_SC03_124_jr_801380E0.o,ov_SC03_124_o0c.o,tail6.data.o,ov_SC03_124_jr_8013F350.o,tail7.data.o,ov_SC03_124_jr_8013FFD8.o,tail8.data.o,ov_SC03_124_jr_80140608.o,tail9.data.o,ov_SC03_124_jr_8015444C.o,ov_SC03_124_jr_80154C24.o,ov_SC03_124_jr_801588CC.o,ov_SC03_124_jr_80159C84.o,tail10.data.o,ov_SC03_124_jr_8015A3C8.o,tail11.data.o,ov_SC03_124_jr_8015AE2C.o,tail12.data.o,ov_SC03_124_jr_8015C32C.o,tail13.data.o,ov_SC03_124_jr_8016AB6C.o,tail14.data.o,ov_SC03_124_jr_80171B4C.o,ov_SC03_124_jr_801734BC.o,tail15.data.o,ov_SC03_124_jr_801789AC.o,ov_SC03_124_jr_80178D40.o,tail16.data.o,ov_SC03_124_jr_8017A4AC.o,tail17.data.o,ov_SC03_124_jr_8017AE2C.o,tail18.data.o,ov_SC03_124_jr_80185498.o,tail19.data.o,ov_SC03_124_jr_80187010.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_124_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_124.o,ov_SC03_124_jr_8012ACE0.o,tail2.data.o,ov_SC03_124_jr_80135888.o,tail3.data.o,ov_SC03_124_jr_80135A4C.o,tail4.data.o,ov_SC03_124_jr_80135D20.o,tail5.data.o,ov_SC03_124_jr_801380E0.o,ov_SC03_124_o0c.o,tail6.data.o,ov_SC03_124_jr_8013F350.o,tail7.data.o,ov_SC03_124_jr_8013FFD8.o,tail8.data.o,ov_SC03_124_jr_80140608.o,tail9.data.o,ov_SC03_124_jr_8015444C.o,ov_SC03_124_jr_80154C24.o,ov_SC03_124_jr_801588CC.o,ov_SC03_124_jr_80159C84.o,tail10.data.o,ov_SC03_124_jr_8015A3C8.o,tail11.data.o,ov_SC03_124_jr_8015AE2C.o,tail12.data.o,ov_SC03_124_jr_8015C32C.o,tail13.data.o,ov_SC03_124_jr_8016AB6C.o,tail14.data.o,ov_SC03_124_jr_80171B4C.o,ov_SC03_124_jr_801734BC.o,tail15.data.o,ov_SC03_124_jr_801789AC.o,ov_SC03_124_jr_80178D40.o,tail16.data.o,ov_SC03_124_jr_8017A4AC.o,tail17.data.o,ov_SC03_124_jr_8017AE2C.o,tail18.data.o,ov_SC03_124_jr_80185498.o,tail19.data.o,ov_SC03_124_jr_80187010.o,tail20.data.o,ov_SC03_124_jr_80188544.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_124/ov_SC03_124.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC03_124/ov_SC03_124_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC03_124/ov_SC03_124_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -3888,7 +3888,7 @@ ov_SC05_017_ELF := $(ov_SC05_017_OUT).elf ov_SC05_017_MAPFILE := $(ov_SC05_017_OUT).map ov_SC05_017_LD_SCRIPT := $(ov_SC05_017_OUT).ld ov_SC05_017_SPLAT_YAML := config/splat.ov_SC05_017.yaml -ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017.o,ov_SC05_017_jr_8012ACE0.o,tail2.data.o,ov_SC05_017_jr_80135888.o,tail3.data.o,ov_SC05_017_jr_80135A4C.o,tail4.data.o,ov_SC05_017_jr_80135D20.o,tail5.data.o,ov_SC05_017_jr_801380E0.o,ov_SC05_017_o0c.o,tail6.data.o,ov_SC05_017_jr_8013F350.o,tail7.data.o,ov_SC05_017_jr_8013FFD8.o,tail8.data.o,ov_SC05_017_jr_80140608.o,tail9.data.o,ov_SC05_017_jr_8015444C.o,ov_SC05_017_jr_80154C24.o,ov_SC05_017_jr_801588CC.o,ov_SC05_017_jr_80159C84.o,tail10.data.o,ov_SC05_017_jr_8015A3C8.o,tail11.data.o,ov_SC05_017_jr_8015AE2C.o,tail12.data.o,ov_SC05_017_jr_8015C32C.o,tail13.data.o,ov_SC05_017_jr_8016AB6C.o,tail14.data.o,ov_SC05_017_jr_80171B4C.o,ov_SC05_017_jr_801734BC.o,tail15.data.o,ov_SC05_017_jr_801789AC.o,ov_SC05_017_jr_80178D40.o,tail16.data.o,ov_SC05_017_jr_8017A4AC.o,tail17.data.o,ov_SC05_017_jr_8017AE2C.o,tail18.data.o,ov_SC05_017_jr_80185A70.o,tail19.data.o,ov_SC05_017_jr_801875E8.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017.o,ov_SC05_017_jr_8012ACE0.o,tail2.data.o,ov_SC05_017_jr_80135888.o,tail3.data.o,ov_SC05_017_jr_80135A4C.o,tail4.data.o,ov_SC05_017_jr_80135D20.o,tail5.data.o,ov_SC05_017_jr_801380E0.o,ov_SC05_017_o0c.o,tail6.data.o,ov_SC05_017_jr_8013F350.o,tail7.data.o,ov_SC05_017_jr_8013FFD8.o,tail8.data.o,ov_SC05_017_jr_80140608.o,tail9.data.o,ov_SC05_017_jr_8015444C.o,ov_SC05_017_jr_80154C24.o,ov_SC05_017_jr_801588CC.o,ov_SC05_017_jr_80159C84.o,tail10.data.o,ov_SC05_017_jr_8015A3C8.o,tail11.data.o,ov_SC05_017_jr_8015AE2C.o,tail12.data.o,ov_SC05_017_jr_8015C32C.o,tail13.data.o,ov_SC05_017_jr_8016AB6C.o,tail14.data.o,ov_SC05_017_jr_80171B4C.o,ov_SC05_017_jr_801734BC.o,tail15.data.o,ov_SC05_017_jr_801789AC.o,ov_SC05_017_jr_80178D40.o,tail16.data.o,ov_SC05_017_jr_8017A4AC.o,tail17.data.o,ov_SC05_017_jr_8017AE2C.o,tail18.data.o,ov_SC05_017_jr_80185A70.o,tail19.data.o,ov_SC05_017_jr_801875E8.o,tail20.data.o,ov_SC05_017_jr_80188B1C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_017/ov_SC05_017.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC05_017/ov_SC05_017_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC05_017/ov_SC05_017_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 diff --git a/config/splat.ov_SC03_001.yaml b/config/splat.ov_SC03_001.yaml index e1191e4879..3ec829e0be 100644 --- a/config/splat.ov_SC03_001.yaml +++ b/config/splat.ov_SC03_001.yaml @@ -123,6 +123,7 @@ segments: - [0x606d8, c, ov_SC03_001_jr_80188830] - [0x60ed8, c, ov_SC03_001_jr_80189030] - [0x62250, c, ov_SC03_001_jr_8018A3A8] + - [0x63784, c, ov_SC03_001_jr_8018B8DC] - [0x650c8, data, tail] - [0xc3b1c, .rodata, ov_SC03_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3bf8, .rodata, ov_SC03_001_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -171,6 +172,8 @@ segments: - [0xc50bc, data, tail20] - [0xc5130, .rodata, ov_SC03_001_jr_8018A3A8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc5168, data, tail21] + - [0xc5188, .rodata, ov_SC03_001_jr_8018B8DC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc51a8, data, tail22] - [0xC730C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC730F] # 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_124.yaml b/config/splat.ov_SC03_124.yaml index 0e98d86e1c..6b271c09f9 100644 --- a/config/splat.ov_SC03_124.yaml +++ b/config/splat.ov_SC03_124.yaml @@ -122,6 +122,7 @@ segments: - [0x52cd4, c, ov_SC03_124_jr_8017AE2C] - [0x5d340, c, ov_SC03_124_jr_80185498] - [0x5eeb8, c, ov_SC03_124_jr_80187010] + - [0x603ec, c, ov_SC03_124_jr_80188544] - [0x6276c, data, tail] - [0xb6dd4, .rodata, ov_SC03_124] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb6eb0, .rodata, ov_SC03_124_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -168,6 +169,8 @@ segments: - [0xb7f84, data, tail19] - [0xb82ac, .rodata, ov_SC03_124_jr_80187010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb82e4, data, tail20] + - [0xb8304, .rodata, ov_SC03_124_jr_80188544] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb8324, data, tail21] - [0xBA48C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBA48F] # 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_SC04_019.yaml b/config/splat.ov_SC04_019.yaml index 6f1ae85dba..35208469df 100644 --- a/config/splat.ov_SC04_019.yaml +++ b/config/splat.ov_SC04_019.yaml @@ -122,6 +122,7 @@ segments: - [0x52cd4, c, ov_SC04_019_jr_8017AE2C] - [0x5dc18, c, ov_SC04_019_jr_80185D70] - [0x5f790, c, ov_SC04_019_jr_801878E8] + - [0x60cc4, c, ov_SC04_019_jr_80188E1C] - [0x64dd0, data, tail] - [0xbc2e8, .rodata, ov_SC04_019] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc3c4, .rodata, ov_SC04_019_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -168,6 +169,8 @@ segments: - [0xbd4c4, data, tail19] - [0xbd7ec, .rodata, ov_SC04_019_jr_801878E8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbd824, data, tail20] + - [0xbd844, .rodata, ov_SC04_019_jr_80188E1C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbd864, data, tail21] - [0xBF9CC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBF9CF] # 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_SC05_017.yaml b/config/splat.ov_SC05_017.yaml index 2a290ce12c..2e3173c920 100644 --- a/config/splat.ov_SC05_017.yaml +++ b/config/splat.ov_SC05_017.yaml @@ -122,6 +122,7 @@ segments: - [0x52cd4, c, ov_SC05_017_jr_8017AE2C] - [0x5d918, c, ov_SC05_017_jr_80185A70] - [0x5f490, c, ov_SC05_017_jr_801875E8] + - [0x609c4, c, ov_SC05_017_jr_80188B1C] - [0x64d94, data, tail] - [0xc2124, .rodata, ov_SC05_017] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc2200, .rodata, ov_SC05_017_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -168,6 +169,8 @@ segments: - [0xc3318, data, tail19] - [0xc3640, .rodata, ov_SC05_017_jr_801875E8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3678, data, tail20] + - [0xc3698, .rodata, ov_SC05_017_jr_80188B1C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc36b8, data, tail21] - [0xC582C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC582F] # 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_SC03_001/ov_SC03_001_jr_8018A3A8.c b/src/ov_SC03_001/ov_SC03_001_jr_8018A3A8.c index bb5ad63752..22a86498c4 100644 --- a/src/ov_SC03_001/ov_SC03_001_jr_8018A3A8.c +++ b/src/ov_SC03_001/ov_SC03_001_jr_8018A3A8.c @@ -3949,514 +3949,3 @@ s32 *func_8018B478(s32 *ot, Panel_8017E978_8018B478 *w0, s16 idx) { INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018B644); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018B8DC); - - - - - - - - -/* Duplicate of the TU's own forward decl at ov_SC03_001_jr_8017AE2C.c:9324 (ABOVE the splice - * point, §138) — kept verbatim so the K&R definition below is checked against it. The 3rd - * parameter is `s32` in that prototype and `s16` here: a K&R identifier-list definition is - * compatible with a prototype carrying the DEFAULT-PROMOTED type, and the s16 spelling is what - * produces the target's per-use `sll/sra 16` off the raw $a2 kept in $s4. */ -extern s32 *func_8018BCD4(s32 *, void *, s32, void *, s32); - -s32 *func_8018BCD4(out, src, idx, w, col) - s32 *out; - void *src; - s16 idx; - void *w; - s32 col; -{ - extern short D_800B9A02; /* TU-visible spelling (file scope, line 2448) */ - extern s16 func_8014168C(s16 a0); - extern u16 D_8011511A; - extern u16 D_80115116; - extern u8 D_80115138[]; - extern u8 D_80115140[]; - extern u8 D_80115148[]; - extern u8 D_80115158[]; - extern u16 D_801C11BA; - extern u16 D_801C11CE; - - extern Env_8018BCD4 D_800AE7BC[]; - - - /* §37 /s-DEP LATTICE: this store MUST be MEM_IN_STRUCT_P. `out[0] = k` folds `out + 0` - * away and expands as a NON-/s mem, which keeps the true_dependence edge to the incoming - * 5th-arg slot and pins `lw $v1,0x38($sp)` after it. The target has the arg load AFTER - * the out[0] store, i.e. the edge must be DROPPED — sched.c's drop clause needs the store - * /s + varying and the load non-/s + fixed-address. A COMPONENT_REF at offset 0 supplies - * the /s. (This single bit was the last 10 of 203 instructions.) */ - - s32 c; - s16 t; - u16 *q; - s32 m; - volatile u16 *pbh; - - c = D_80115138[idx]; - - ((W_8018BCD4 *)out)->w = 0x04000000; - *((u8 *)out + 0xC) = 0x30; - *((u8 *)out + 0xD) = 0x48; - *(s16 *)((u8 *)out + 0xE) = 0x4056; - out[1] = col | 0x64000000; - - if (c < 10) { - /* §135 idiom 9/T3: the fleet decl returns s16; cast at the CALL so the return feeds - * `sll $v0,$v0,1` with no `andi`/re-extend. */ - t = ((s32 (*)(s16)) func_8014168C)(idx) * 2; - } else { - t = (D_80115148[idx * 2] - D_80115140[idx]) * 2; - } - - q = (u16 *)(t * 2 + (s32)src); - pbh = (volatile u16 *)&D_800B9A02; - *(s16 *)((u8 *)out + 0x8) = q[0] - 8; - *(s16 *)((u8 *)out + 0xA) = q[1]; - *(s16 *)((u8 *)out + 0x12) = 8; - *(s16 *)((u8 *)out + 0x10) = 8; - - /* §36 BITFIELD STORE = THE MASK-ORDER DECOUPLER. The head materializes 0x00FFFFFF - * (lui+ori) BEFORE 0xFF000000 (lui) while the body ANDs the dest first — the signature of - * expmed.c's store_fixed_bit_field, not of user-mask C. `volatile` on the index read is - * what keeps the SECOND *pbh load alive (a plain read cse-folds and the fn loses 5 ins). */ - ((PTag_8018BCD4 *)out)->addr = - ((PTag_8018BCD4 *)(D_800AE7BC[*pbh].ot + 2))->addr; - ((PTag_8018BCD4 *)(D_800AE7BC[*pbh].ot + 2))->addr = (u32)out; - - out += 5; - if (c < 10) { - return out; - } - - m = D_8011511A; - if (m == idx) { - if ((D_80115116 & 8) != 0) { - s16 j; - s32 k; - s16 y; - s16 eight; - u16 *pb; - /* §137/§36: m24 is a 2-insn constant, but the natural allocno order puts j/k ahead - * of it and rotates $a2/$a3/$t0. Pinning m24 alone restores the whole rotation. */ - register u32 m24 __asm__("$6"); - u32 mhi; - s32 vsum; - - j = 0; - k = m; - eight = 8; - pb = (u16 *)&D_800B9A02; - m24 = 0xFFFFFF; - mhi = 0xFF000000; - /* NOTE: the loop deliberately has NO source pointer of its own. gcc's combine_givs - * folds every `out + K` reference into ONE address giv based at out+0x12; adding a - * `u8 *p = (u8*)out + 0x12` biv makes `*(s16*)p` use the biv directly, which - * survives as a SECOND register (the +1-instruction LENGTH-DRIFT). The giv's base - * is the LAST such reference in source order — hence the +8 (`vsum`) store sits - * before the 0x10/0x12 stores here even though the scheduler sinks it back. */ - for (; j < 2; j++) { - if (j == 0) { - if (D_80115140[k] == 0) { - continue; - } - *((u8 *)out + 0xD) = 0x30; - y = D_801C11BA - 2; - } else { - s32 k2 = k * 2; - if ((((s8 *)D_80115158)[k2] - ((s8 *)D_80115140)[k]) < 7) { - continue; - } - *((u8 *)out + 0xD) = 0x38; - y = D_801C11CE + 1; - } - *(s16 *)((u8 *)out + 0xA) = y; - __asm__("" ::: "memory"); /* keeps the y store ahead of the 0x64808080 pair */ - *(u32 *)out = 0x04000000; - *((u8 *)out + 0xC) = 0x78; - *(u32 *)((u8 *)out + 0x4) = 0x64808080; - *(s16 *)((u8 *)out + 0xE) = 0x4056; - vsum = *(s32 *)((u8 *)w + 8) + *(s32 *)((u8 *)w + 0xC) - 0xC; - *(s16 *)((u8 *)out + 0x8) = vsum; - *(s16 *)((u8 *)out + 0x10) = eight; - *(s16 *)((u8 *)out + 0x12) = eight; - *(u32 *)out = ((*(u32 *)out) & mhi) | (D_800AE7BC[*pb].ot[2] & m24); - { - register u32 *op __asm__("$4"); - op = D_800AE7BC[*pb].ot; - op[2] = (op[2] & mhi) | (((u32)out) & m24); - } - out += 5; - } - } - } - return out; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018C000); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018C89C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018C8D4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018C914); - -#include "common.h" - -/* func_8018C960 — ov_SC03_001 (133 ins), exemplar of a 5-member open-only - * h_norm cluster. Builds the full-screen fade overlay: a DR_MODE-style 8-byte - * GP0 packet (0xE1000015), a 320x240 semi-transparent gouraud quad (POLY_G4, - * code 0x3A), and a second 8-byte GP0 packet (0xE1000240), each linked into the - * current OT with the psyq `addPrim` idiom. The type shapes and the - * `((PTag *)x)->addr = ((PTag *)ot)->addr; ((PTag *)ot)->addr = (u32)x;` pair - * are copied VERBATIM from the already-matched neighbour func_8018BCD4 in this - * same TU (§71) — Env_* / PTag_* there are the fleet-canonical shapes. - * - * Levers that were load-bearing (all byte-tested; the draft is PIN-FREE): - * §20 &D_801151D0 / &D_800B9A02 taken into pointer LOCALS -> each address is - * force_reg'd once (lui+addiu -> $t2 / $a3) instead of a %lo per use. - * §36 the 24-bit BITFIELD store, not a hand-written mask, is what emits - * 0x00FFFFFF (lui+ori) ahead of 0xFF000000 (lui) while the body ANDs the - * destination first — expmed's store_fixed_bit_field signature. - * §37 asm-label aliases for D_801EF1EC/D_801EF1F0: the TU canon is u16/s16 - * but the target does a bare `lbu %lo(sym)`, and a plain block-scope - * `extern u8` would be a conflicting redeclaration. - * --- `volatile` on the OT index read keeps all SIX *pbh loads alive; a plain - * read cse-folds them and the function loses ~25 instructions. - * S1 the whole body is ONE branch-free basic block and every store ties at - * the same priority, so forward asm order == source statement order — - * the POLY_G4 block below is a literal transcription of the target. - * S2 `p` is destructively updated (multi-set -> no birthing boost) so its - * `addiu +8` floats up into the preceding load-delay gap, while `r` is a - * FRESH single-set local (boosted) so its `addiu +0x24` sinks to sit - * immediately before `sb 3($a0)`. Both placements are the target's. - * --- the bare `p = r;` before r's uses is a COMBINE BARRIER: without a SET - * of `p` between `r = p + 9` and r's first use, `can_combine_p` lets - * combine substitute `r` -> `p + 0x24` into every MEM offset and the - * `addiu` disappears entirely (and, at the tail, `p += 2` folds to - * `addiu $t3,$t3,0x2C` off the stale base instead of `addiu $t3,$a0,8`). - * It also fixes the register rotation for free — verified that adding or - * removing `register __asm__` pins on p/r/pbh is a byte no-op. - */ - -/* ---- TU-visible spellings (file scope of ov_SC03_001_jr_8018A3A8.c) ---- */ -extern s16 D_800B9A02; -extern s32 D_801151D0; -extern u16 D_801EF1EC; -extern s16 D_801EF1F0; - -void func_8018C960(void) { - /* §100/§120: draft-local, uniquely-named types — they live in the BODY so - * they cannot collide with the TU's own Env_8018BCD4 / PTag_8018BCD4. */ - typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018C960; - typedef struct { u32 *ot; u32 pad[4]; } Env_8018C960; /* 0x14 stride */ - typedef struct { - u32 tag; /* 0x00 */ - u8 r0, g0, b0, code; /* 0x04..0x07 */ - s16 x0, y0; /* 0x08, 0x0A */ - u8 r1, g1, b1, p1; /* 0x0C..0x0F */ - s16 x1, y1; /* 0x10, 0x12 */ - u8 r2, g2, b2, p2; /* 0x14..0x17 */ - s16 x2, y2; /* 0x18, 0x1A */ - u8 r3, g3, b3, p3; /* 0x1C..0x1F */ - s16 x3, y3; /* 0x20, 0x22 */ - } PG4_8018C960; /* -> 0x24 */ - - extern Env_8018C960 D_800AE7BC[]; - extern u8 aD801EF1EC __asm__("D_801EF1EC"); - extern u8 aD801EF1F0 __asm__("D_801EF1F0"); - - u32 **pp; - volatile u16 *pbh; - u32 *p; - u32 *r; - u8 c1, c2; - - pp = (u32 **)&D_801151D0; - pbh = (volatile u16 *)&D_800B9A02; - - p = *pp; - ((PTag_8018C960 *)p)->len = 1; - p[1] = 0xE1000015; - ((PTag_8018C960 *)p)->addr = ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; - - p += 2; - ((PG4_8018C960 *)p)->tag = 0x08000000; - ((PG4_8018C960 *)p)->code = 0x3A; - ((PG4_8018C960 *)p)->x2 = -160; - ((PG4_8018C960 *)p)->x0 = -160; - ((PG4_8018C960 *)p)->x3 = 160; - ((PG4_8018C960 *)p)->x1 = 160; - c1 = aD801EF1EC; - ((PG4_8018C960 *)p)->b1 = c1; - ((PG4_8018C960 *)p)->b0 = c1; - ((PG4_8018C960 *)p)->g1 = c1; - ((PG4_8018C960 *)p)->g0 = c1; - ((PG4_8018C960 *)p)->r1 = c1; - ((PG4_8018C960 *)p)->r0 = c1; - c2 = aD801EF1F0; - ((PG4_8018C960 *)p)->y1 = -120; - ((PG4_8018C960 *)p)->b3 = c2; - ((PG4_8018C960 *)p)->b2 = c2; - ((PG4_8018C960 *)p)->g3 = c2; - ((PG4_8018C960 *)p)->g2 = c2; - ((PG4_8018C960 *)p)->r3 = c2; - ((PG4_8018C960 *)p)->r2 = c2; - ((PG4_8018C960 *)p)->y0 = -120; - ((PG4_8018C960 *)p)->y3 = 120; - ((PG4_8018C960 *)p)->y2 = 120; - - ((PTag_8018C960 *)p)->addr = ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; - - r = p + 9; /* 0x24 */ - p = r; /* COMBINE BARRIER — see header */ - ((PTag_8018C960 *)r)->len = 1; - r[1] = 0xE1000240; - ((PTag_8018C960 *)r)->addr = ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr = (u32)r; - - p += 2; - *pp = p; -} - - - -extern void (*D_801EB364[])(void); - -void func_8018CB74(void *a0) { - D_801EB364[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801EB344[]; - -void func_8018CBB0(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801EB344[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801EB344)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801EB344[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801EB378[])(void); - -void func_8018CC74(void *a0) { - D_801EB378[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8018CBB0(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_8018CCB0(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_8018CBB0(param_1, -0x80); - func_8018CBB0(param_1, -0x30); - func_8018CBB0(param_1, 0x20); - func_8018CBB0(param_1, 0x70); - func_8018CBB0(param_1, 0xc0); - } - if (1 < uVar1) { - func_8018CBB0(param_1, -0x58); - func_8018CBB0(param_1, -0x8); - func_8018CBB0(param_1, 0x48); - func_8018CBB0(param_1, 0x98); - func_8018CBB0(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_8018CBB0(s32, s32); - -void func_8018CD98(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_8018CBB0(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801EB36C; - -void func_8018CDD8(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801EB36C, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_8018CE60(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018CEA8); - - -extern void (*D_801EB48C[])(void); - -void func_8018CF54(void *a0) { - D_801EB48C[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -/* Declarations conformed to the TU (ov_SC04_018_jr_8017AE2C.c) — lever (A): - * func_8012A828 : TU declares `extern void ((void (*)(s32*, s32))func_8012A828)(s32*, s32);` - * at L3460 / L4615 / L5083 / L5372 / L5859 / L6004 / L6155 / - * L6479 / L6504 / L6529. The draft's `(s32, s32)` form caused - * the 7697-vs-6529 conflict. Conformed here; the type - * disagreement is pushed to a cast at the call site. - * D_8018D838 : TU declares `extern u8 D_8018D838[];` (block scope, L3467). - * Conformed; `(s32)D_8018D838` == `(s32)&D_8018D838`. - * func_801788B8 : verbatim from TU L2532 / L7756 (below the splice point). - * func_8012C354, D_801EB390, func_8018D088, func_8018CF90 : no other - * declaration anywhere in the TU (func_8018D088 / func_8018CF90 - * appear only as INCLUDE_ASM, which emits no C declaration). - * - * Body: the original draft was NOT byte-correct. `*(u16 *)(x + 2) = 1;` must be - * sequenced BEFORE the func_8012A828 call, not after it — with it after, gcc - * coalesces the store base onto $a0 (`sh v0,2(a0)`) and re-emits the arg copy, - * giving a 6-instruction ADDRESSING/cse diff. Moved above the call; both stores - * now retire off $s0 and the sh lands in the jal delay slot, as in the target. */ - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8012A828(s32, s32); -extern s32 func_801788B8(s32 arg0, s32 arg1); - -extern void func_8018D088(void); - -void func_8018CF90(s32 a0) { - - extern M2C_UNK D_801EB390; - extern u8 D_8018D838[]; - s32 s0 = a0; - if (func_8012C354(a0, (s32)&D_801EB390)) { - *(u8 *)(s0 + 0xC0) = 1; - *(u16 *)(s0 + 0x2) = 1; - ((void (*)(s32*, s32))func_8012A828)((s32 *)s0, (s32)D_8018D838); - func_801788B8(s0, (s32)func_8018D088); - } -} - - -void func_8018CFF4(void) { -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - -void func_8018CFFC(s32 *a0) -{ - - extern signed char D_801EB468[]; - s32 v0; - - v0 = *(s16 *)((s32)a0 + 0x70); - v0 = v0 * 4; - func_80178CBC(a0, *(s32 *)((s32)D_801EB468 + v0)); - *(s16 *)((s32)a0 + 0x2) = 0x3; -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8018D048(s32 a0) { - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018D088); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018A3A8", func_8018D0E4); - - - - - - diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8018B8DC.c b/src/ov_SC03_001/ov_SC03_001_jr_8018B8DC.c new file mode 100644 index 0000000000..fb431a3343 --- /dev/null +++ b/src/ov_SC03_001/ov_SC03_001_jr_8018B8DC.c @@ -0,0 +1,3860 @@ +#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 { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +typedef void (*Handler)(struct Entry_8016E95C *); +typedef struct { u32 addr : 24; u32 len : 8; } PTag_S40_8018B238; +typedef struct { u32 w; } W_S40_8018B238; +typedef struct { u32 *ot; u32 pad[4]; } Env_S40_8018B238; /* 0x14 stride */ +typedef struct { s16 v; } Flag_S40_8018B238; /* 0x02 stride */ +typedef struct Panel_S40_8018B238 { + s16 f0; /* 0x00 */ + s16 f2; /* 0x02 */ + void *f4; /* 0x04 */ + void *f8; /* 0x08 */ + s16 fC; /* 0x0C */ + s16 fE; /* 0x0E */ + s16 f10; /* 0x10 */ + s16 f12; /* 0x12 */ + void *f14; /* 0x14 */ + void *f18; /* 0x18 */ + void *f1C; /* 0x1C */ +} Panel_S40_8018B238; /* 0x20 stride */ +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018FA44; +extern u8 D_8018F9B4; +extern u8 D_8018F990; +extern u8 D_8018F96C; +extern u8 D_8018FA20; +extern u8 D_8018F9FC; +extern u8 D_8018F9D8; +extern u8 D_8018F948; +extern void func_80145934(void); +extern u8 D_8018FAD4; +extern u8 D_8018FAB0; +extern u8 D_8018FA8C; +extern u8 D_8018FA68; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EECC[]; +extern unsigned char D_8018EEFC[]; +extern unsigned char D_8018EF4C[]; +extern unsigned char D_8018EF7C[]; +extern unsigned char D_8018EFAC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018EFFC[])(void *); +extern u8 D_80126BA4; +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 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_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +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 s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +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_80015954(s32 a0, s32 a1); +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 s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +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 void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +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(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +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_80147478(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_800484EC(s32 a0, s32 a1, s32 a2); +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 void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(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_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 u8 D_800B9A64; +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_80047D3C(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_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 s32 D_801151D4; +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_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +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 void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +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 void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +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_80149FA8(void); +extern s32 D_8018F0C4[]; +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 s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +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_80016714(void *a0, s32 a1); +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 void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +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 void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +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_8014B5B0(s32 *a0); +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_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(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 s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(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_8014C088(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 arg0, s32 arg1, void *arg2); +extern u8 D_8018F14C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +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 ratan2(s32 dx, s32 dy); +extern u8 D_8018F154; +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 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 void func_8014C978(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 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_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +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 void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); +extern s32 func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +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 s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +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 s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +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_8014E6F8(struct SubE6F8 *a0); +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 s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +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_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ED4D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ED4DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(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 short func_801508F8(s32 a0); +extern s32 D_8018F184; +extern s32 D_80126990; +extern s32 D_80126994; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 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_8012DB84(void); +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_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 s32 func_80151944(void); +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_80154A74(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 void (*D_8018F22C[])(void); +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_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018F250[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018F240; +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 (*D_8018F264[])(void); +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 u8 D_8018F270[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018F280[])(void); +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 (*D_8018F298[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018F288; +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 (*D_8018F2AC[])(void); +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 (*D_8018F2C8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018F2B8; +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 (*D_8018F2DC[])(void); +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 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 (*D_8018F2F0[])(void); +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 (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +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 s32 D_8018F304; +extern void (*D_8018F32C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F30C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +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_800183E0(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_80029178(s32); +extern int (*D_8018F378[])(void); +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 void (*D_8018F37C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(s16 *a0, s16 *a1); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F7E0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F7F0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern s32 func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801ED510; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F818[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F7F8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F808; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F858[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F860[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F82C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F86C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F83C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801ED518; +extern s32 D_801ED524; +extern s32 D_801ED528; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F8A8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F87C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801ED520; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018FAF8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F918[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018FB9C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018FCF0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018FB0C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FCF8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018FB1C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018FB3C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018FD00[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(s32 arg0); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018FD28[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018FD34[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern void func_8015CC40(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018FBA8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018FDD8; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018EEBC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018FDEC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018FE28[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018FE70; +extern u16 D_8018FE72; +extern u16 D_8018FE74; +extern s32 D_8018FE78; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018FE80; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018FB8C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018FF04[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018FFB4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018FFE4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80190048; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801ED530[]; +extern void func_8016216C(void); +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8019006C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801ED588[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801900B4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801900A4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801EC888[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801900BC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80190110[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801900D8; +extern s16 D_8019010C; +extern s16 D_8019010A; +extern s16 D_80190108; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8019011C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801ED5E8; +extern u8 D_801ED5E9; +extern u8 D_801ED5EA; +extern u8 D_801ED5EB; +extern u8 D_801ED5EC; +extern u8 D_801ED5ED; +extern u8 D_801ED5EE; +extern u8 D_801ED5EF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8019012C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801ED628; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80190170[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801901EC[]; +extern s32 D_8019020C[]; +extern u8 D_80190288[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801902A8[]; +extern u8 D_801902C8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80190364[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801903E0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801EC898; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801903EC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801903F4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801904BC[])(void); +extern void func_80166618(void *a0); +extern void (*D_801904CC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801904DC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801904E8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80190448[]; +extern u8 D_8019045C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80190500[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80190508[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80190510[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80190518[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80190520[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80190528[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80190530[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801905E4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801905EC[])(void); +extern void func_80169F00(void *a0); +extern char D_8019059C[]; +extern char D_8019055C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80190624[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80190630[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80190678[])(void); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801906F4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801ED948; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801906E8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8019072C[]; +extern unsigned short D_80190734[]; +extern unsigned short D_8019073C[]; +extern unsigned char D_801ED950[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801ED948; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80190744[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EDA84; +extern M2C_UNK D_801EDA88; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EDA10; +extern void (*D_80190774[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801EDA8C[]; +extern u8 D_801EDA94[]; +extern u8 D_801EDA44[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8019077C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80190798[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801907A0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190808[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801907AC; +extern u8 D_801907B8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8019083C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80190844[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80190898[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801908CC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801908BC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801908E8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32 _arg0); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80190960[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80190968[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80190970[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80190978[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80190980[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80190988[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80190994[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801909A0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801909AC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801909BC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801909CC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801909D4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801909DC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801909E4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801909EC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801909F4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801909FC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80190A04[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80190A0C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80190A14[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80190A1C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80190A24[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80190A2C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80190A34[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80190A3C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80190A44[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80190A4C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80190A54[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80190A5C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80190A64[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80190A6C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80190A74[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80190A7C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80190AC0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80190A84; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80190AF0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80190B2C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern void func_801748EC(void); +extern s32 func_801749C8(); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80190B84[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80190B94[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80190B9C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175494(void); +extern void (*D_80190D04[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80190D10[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801ECAE0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801789AC(s32 arg0); +extern s16 D_801EF3F0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern short D_801EF464; +extern void func_80178D18(void); +extern s32 func_80178D40(s32 arg0, s32 arg1); +extern void func_80179B28(s32 a0); +extern void func_80179B74(u16 *p); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179DCC(short a0); +extern void func_80179DF8(void); +extern void func_80179E1C(short a0); +extern void func_80179E48(s16 a0); +extern void func_80179E74(s16 a0); +extern void func_80179EA0(u16 *a0); +extern void func_80179EE8(short a0); +extern void func_80179F14(s16 a0, s16 a1); +extern void func_80179F44(void); +extern void func_80179F6C(short a0); +extern void func_80179F98(u16 *a0); +extern void func_80179FEC(u16 *a0); +extern void func_8017A040(u16 *a0); +extern s32 D_801EE5F4; +extern void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +extern s32 D_801EE61C; +extern void func_8017A144(s32 a0); +extern void func_8017A180(void); +extern void func_8017A1A8(void); +extern void func_8017A1D0(void); +extern void func_8017A1F8(void); +extern void func_8017A220(void); +extern void func_8017A248(void); +extern void func_8017A270(void); +extern void func_8017A298(void); +extern void func_8017A2C0(void); +extern void func_8017A2E8(void); +extern void func_8017A310(void); +extern void func_8017A338(void); +extern void func_8017A360(void); +extern void func_8017A388(void); +extern s16 D_801EE5D8; +extern s32 func_8017A3B0(void); +extern short D_801EE614; +extern short D_801EE610; +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); +extern int func_8017A3D8(void); +extern void func_80172310(u8*); +extern void func_80172780(void*); +extern void func_80172894(void*); +extern void func_801729B0(s32); +extern void func_80172B14(s16); +extern void func_80172C50(u16 *); +extern void func_80172D68(s32); +extern void func_801733FC(s16, u16 *); +extern void func_80173460(s32, s32); +extern void func_801734BC(s32, s32); +extern void func_801736B0(s32, s32); +extern void func_801737B8(s16); +extern void func_801738DC(s16); +extern void func_80173A28(s32, s32, s32, s32, s32, s32); +extern void func_80174438(s32); +extern void func_8017A4AC(void); +extern s32 func_8017AD0C(s32 arg0); +extern s32 func_8017AD0C(s32); +extern s32 func_8017ADE8(s32 a0); +extern s32 func_8017AE08(void); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012AD80(s32 a0); +extern s32 func_8012B030(u8 *a0); +extern s32 func_8012B744(void *a0, void *a1); +extern s32 func_8012BE98(s32 a0, u16 *a1); +extern s16 D_801EF3A8; +extern s16 D_801EF3AA; +extern s16 D_801EF3B4; +extern void func_8017AE2C(s32 param_1); +extern void func_8017B0E4(int param_1, int param_2); +extern s16 D_801EE5DC; +extern u16 D_801EE65C; +extern u16 D_801EE65E; +extern u16 D_801EE660; +extern void func_8017B1D8(void); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B490(s32 param); +extern s32 func_8017B614(s32 param_1, s32 param_2); +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern u8 D_8012694C; +extern s16 D_801EE654; +extern s16 D_801EE656; +extern s16 D_801EE658; +extern s16 D_801EE64C; +extern s16 D_801EE64E; +extern s16 D_801EE650; +extern void func_8017B7A8(void); +extern s16 D_801EE66C; +extern s16 D_801EE66E; +extern s16 D_801EE670; +extern s16 D_801EE674; +extern s16 D_801EE676; +extern s16 D_801EE678; +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern short D_801EE664; +extern short D_801EE666; +extern short D_801EE668; +extern void func_8017B940(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); +extern SV4 D_801EE5FC; +extern SV4 D_801EE604; +extern void func_8017BA3C(s32 param_1, s32 param_2); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void (*D_801EE624[10])(int); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8012A4BC(void); +extern void func_8017BCF4(int param_1); +extern void (*D_801EE620)(void); +extern void func_8017BD50(int param_1); +extern void (*D_80190EEC[])(void); +extern void func_8017BE60(void *a0); +extern void (*D_80190F8C[])(void); +extern void func_8017BE9C(void *a0); +extern void (*D_80190F94[])(void); +extern void func_8017BED8(void *a0); +extern void (*D_80190F9C[])(void); +extern void func_8017BF14(void *a0); +extern u8 D_801EE680[]; +extern u8 *func_8012913C(s32 a0); +extern s32 func_8012C750(s32 a0); +extern void func_8017BF50(s32 a0); +extern s16 D_801EE880; +extern void func_8017C094(void); +extern u8 D_80190EF8[]; +extern void func_8017C100(s32 param_1); +extern void func_8017C1AC(s32 param_1); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012A828(s32, s32); +extern void func_8012B260(u8 *a0); +extern u8 D_80190F74[]; +extern u8 D_80190F7C[]; +extern void func_8017C1EC(s32 a0); +extern void func_8017C2B0(s32 a0); +extern void (*D_80190FBC[])(void); +extern void func_8017C338(void *a0); +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_8017C374(s32 param_1); +extern void func_8017C538(u8 *p); +extern void (*D_80190FC4[])(void); +extern void func_8017C5CC(void *a0); +extern u8 D_80190FB0; +extern void func_8017C608(s32 a0); +extern void func_8017C6AC(int a0); +extern void func_8017C710(s32 arg0); +extern void func_8017DC48(void); +extern void (*D_8019106C[])(void); +extern void func_8017DDEC(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_8019105C; +extern void func_8017DE28(s32 arg0); +extern void func_8017DEA4(void); +extern void (*D_801910A4[])(void); +extern void func_8017DEAC(void *a0); +extern void func_8017E204(void *arg0); +extern s32 func_8012AD50(void *arg0); +extern void func_8017DEE8(void *arg0); +extern u8 D_80078EB1; +extern u8 D_80078E78[]; +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_8017E1B4(void *a0); +extern void func_8017E2C0(void *arg0); +extern void func_8017DF78(void *arg0); +extern void aF8017E1B4(); +extern void func_80017714(void *); +extern u32 D_801EE918; +extern u16 D_801910AC[]; +extern u16 D_801EE91C[]; +extern s32 D_801910CC; +extern void func_8017E408(void); +extern void func_8017E824(void *arg0); +extern s32 func_8017E494(s32 param_1); +extern s32 func_8017E4E4(void); +extern void func_800D1E28(void); +extern s32 func_800D1D94(void); +extern void func_8001BFD0(void); +extern s32 func_8017E578(s32 a0); +extern void func_800D1EBC(void); +extern void func_8017E628(void); +extern s32 func_8017E648(void *a0); +extern void (*D_801910EC[])(void); +extern void func_8017E720(void *a0); +extern void (*D_801910F4[])(void); +extern void func_8017E75C(void *a0); +extern void (*D_80191100[])(void); +extern void func_8017E798(void *a0); +extern void (*D_8019110C[])(void); +extern void func_8017E7D4(void *a0); +extern s32 D_80127050; +extern void func_8017E810(void); +extern void (*D_801913C0[])(void); +extern void func_8017E824(void *a0); +extern void func_8017E860(s32 *a0); +extern void func_8017E874(void *a0); +extern void (*D_801913C8[])(void); +extern void func_8017E8AC(void *a0); +extern void func_8017E8E8(u8 *a0); +extern void func_8017E8FC(void); +extern void func_8012A094(s32 a0); +extern void func_8017E9E0(void *a0); +extern void func_8017E91C(void); +extern void (*D_801913D0[])(void); +extern void func_8017EA50(u8 *a0); +extern void func_8017EA58(void *a0, u8 *a1); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017EB98(s32 param_1); +extern void func_80187778(s32 *a0, s32 a1); +extern void func_8017ED8C(void *a0); +extern void (*D_801914A8[])(void); +extern void func_8017EEA8(void *a0); +extern void func_80178CBC(s32*, s32); +extern void func_8017EEE4(void * arg0); +extern s32 func_8017EF10(void); +extern s32 func_801877C0(s32); +extern s32 func_80187904(void); +extern s32 func_8018766C(s32 arg0, s32 arg1); +extern void func_80187778(s32*, s32); +extern void func_8017F058(void *a0); +extern void func_8017F0EC(void * arg0); +extern void func_8012E32C(void); +extern void func_8017F750(void *, s32); +extern s32 RotNclip4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); +extern s32 RotTransPers4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); +extern void *func_80010A08(s32); +extern s32 AddPrim(s32, void *); +extern void func_8012E28C(s32, s32); +extern void func_8017F368(u16 *a0, s32 a1); +extern void (*D_801918FC[])(void); +extern void func_8017F7C8(void *a0); +extern void (*D_80191928[])(void); +extern void func_8017F920(void *a0); +extern void (*D_80191930[])(void); +extern void func_8017F95C(void *a0); +extern void (*D_80191940[])(void); +extern void func_8017F998(void *a0); +extern void (*D_80191950[])(void); +extern void func_8017F9D4(void *a0); +extern void func_8017FA10(void); +extern void (*D_80191960[])(void); +extern void func_8017FBC4(void *a0); +extern s32 D_801915FC; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); +extern void func_8017FD5C(void); +extern s32 D_80191634; +extern void func_8017FD90(void); +extern s32 D_8019166C; +extern void func_8017FDC4(void); +extern s32 D_80191694; +extern void func_8017FDF8(void); +extern s32 D_801916CC; +extern void func_8017FE2C(void); +extern s32 D_80191744; +extern void func_8017FED4(void); +extern s32 func_8017FF08(void); +extern s32 D_8019179C; +extern void func_8017FF54(void); +extern s32 D_801917EC; +extern void func_8017FF88(void); +extern s32 D_8019184C; +extern void func_8017FFBC(void); +extern s32 func_8017FFF0(void); +extern s32 D_80191894; +extern void func_8018003C(void); +extern s32 func_80180070(void); +extern void func_8012B414(int a0); +extern void func_801803DC(s32 arg0); +extern void func_801805EC(void *a0); +extern void (*D_80191978[])(void); +extern void func_801805F8(void *a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern void func_80180728(void *a0); +extern void func_80180770(void *a0); +extern void (*D_8019198C[])(void); +extern void func_8018077C(void *a0); +extern void func_801808F0(void *a0); +extern void (*D_801919A0[])(void); +extern void func_801808FC(void *a0); +extern void func_80180A58(short *a0); +extern void (*D_80191B0C[])(void); +extern void func_80180A88(void *a0); +extern void func_8012E8E0(s32, s32); +extern void func_8012E88C(s32); +extern void func_80187750(s32); +extern void func_80187994(s32, s32, s32, s32); +extern void aF80180B5C(); +extern void func_8012A828(s32 a0, s32 a1); +extern void func_80180C3C(void * arg0); +extern s32 func_801877C0(s32 a0); +extern void func_80180D5C(s32 a0); +extern s32 func_80180D9C(void); +extern s32 func_80180AC4(s32 a0); +extern s32 func_80180B5C(void *a0); +extern void func_80180DD8(int param_1); +extern s32 func_8012BD14(s32 a0); +extern s32 func_80181078(void *a0); +extern void func_801810EC(void *a0); +extern void (*D_80191B30[])(void); +extern void func_801810F8(void *a0); +extern void func_8018126C(void * arg0); +extern void func_80181298(short *param_1); +extern void (*D_80191C08[])(void); +extern void func_801812C4(void *a0); +extern int func_80181374(void); +extern void func_80181394(void); +extern void func_80178CBC(s32 *a0, s32 a1); +extern void func_801813C0(short *a0); +extern void (*D_80191C20[])(void); +extern void func_801817C4(void *a0); +extern void func_801818E0(short *a0); +extern void (*D_80191C90[])(void); +extern void func_8018190C(void *a0); +extern void func_80181988(void *a0); +extern void func_801819A0(s32 a0); +extern s32 func_80181948(s32 a0); +extern void func_801818E0(short*); +extern void func_801819E0(int param_1); +extern s32 func_8018739C(void); +extern s32 func_80188D1C(void *); +extern s32 func_80178BF8(void); +extern s32 func_80181BC0(void *a0); +extern void func_8012E88C(s32 a0); +extern void func_80187750(s32 a0); +extern void func_80181CAC(void *a0); +extern void func_80181D8C(short *a0); +extern void (*D_80191D3C[])(void); +extern void func_80181ED4(void *a0); +extern void func_80181F74(short *a0); +extern void func_80181FA0(s32 a0); +extern s32 func_80181FE0(void *a0); +extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2541) */ +extern s32 func_80182058(void *a0); +extern s32 func_801886A0(s32 a0); +extern s32 func_80187A64(s32 a0); +extern void func_801821C0(void *a0); +extern void func_80181D04(void *arg0); +extern void func_80182254(void *arg0); +extern void func_80182294(void *a0); +extern void func_80182450(short *param); +extern void func_8018260C(short *a0); +extern void func_8018268C(void * arg0); +extern void (*D_80191E0C[])(void); +extern void func_80182824(void *a0); +extern s32 D_801DD064; +extern s32 D_801D6014; +extern void func_80182898(void); +extern s32 D_801EEAF8; +extern void func_801828B0(void); +extern void func_80178CBC(s32 *, s32); +extern void func_801828C8(void *arg0); +extern void func_80182928(s32 a0); +extern void func_801824DC(void *arg0); +extern void func_80182968(void *arg0); +extern void func_801825A8(void *arg0); +extern void func_80182A34(void *arg0); +extern void func_80187994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8018260C(short*); +extern void func_80182AEC(void *arg0); +extern void func_80182638(void *arg0); +extern void func_80182B78(void *arg0); +extern void func_801826B8(void *arg0); +extern void func_80182CC4(void *arg0); +extern s32 func_80182DFC(void *a0); +extern void func_80182E70(void *arg0); +extern void func_80182EE4(void *a0); +extern void func_801831F0(short *a0); +extern void (*D_801922F0[])(void); +extern void func_8018333C(void *a0); +extern void func_801833DC(short *a0); +extern void func_80183408(s32 a0); +extern s32 func_80183448(void *a0); +extern s32 func_801834C0(void *a0); +extern void func_80183628(void *a0); +extern void func_80183168(s32 *a0); +extern void func_801836BC(s32 *a0); +extern void func_80183708(void *a0); +extern void func_801831F0(short*); +extern void func_80183778(void *arg0); +extern void func_801838BC(short *a0); +extern void func_80183948(void *arg0); +extern void func_801839BC(void *a0); +extern void (*D_80192418[])(void); +extern void func_80183A88(void *a0); +extern s32 D_801DD950; +extern s32 D_801DAAAC; +extern void func_80183AFC(void); +extern void func_80183B14(void *arg0); +extern void func_80183B74(s32 a0); +extern s32 func_80183BB4(void); +extern void func_80183BF0(void *arg0); +extern void func_80183A14(void *arg0); +extern void func_80183CC8(void *arg0); +extern void func_80183D08(void *a0); +extern s32 func_80183EE4(void *a0); +extern void func_80183F58(void *arg0); +extern void func_801840B8(void * arg0); +extern void (*D_80192510[])(void); +extern void func_80184210(void *a0); +extern void func_8018424C(short *a0); +extern void func_80184278(void * arg0); +extern void func_801842A4(short *param); +extern void func_801842D0(s32 a0); +extern void func_80184310(s32 a0); +extern void func_8018444C(void *arg0); +extern void func_8018451C(void * arg0); +extern void (*D_80192544[])(void); +extern void func_80184748(void *a0); +extern void func_80184784(void *a0); +extern void func_801847D0(void *arg0); +extern void (*D_80192624[])(void); +extern void func_80184900(void *a0); +extern void func_8018493C(short *param); +extern s32 func_801849E0(void); +extern s32 func_80187A64(s32); +extern void func_80184A8C(s32 arg0); +extern s32 func_80184CF0(void *a0); +extern void func_80184D64(short *param_1); +extern void (*D_80192828[])(void); +extern void func_801850A0(void *a0); +extern void func_801850DC(s32 a0); +extern void func_8018511C(s32 a0); +extern void func_8018515C(s32 a0); +extern s32 func_8018519C(void); +extern void func_801851D8(short *a0); +extern short D_80192740; +extern void func_80185208(void *a0); +extern void func_80185238(short *a0); +extern short D_801927B8; +extern void func_80185268(short *a0); +extern void func_80184F18(s32 *a0); +extern void func_80185298(s32 *a0); +extern void func_80184D64(short*); +extern void func_80185334(s32 *a0); +extern void func_80184D90(void *arg0); +extern void func_801853D0(void *arg0); +extern void func_80185874(short *param_1); +extern void func_801858A0(short *param_1); +extern void func_801858CC(short *param_1); +extern void func_801858F8(short *param_1); +extern void func_80185924(short *a0); +extern void (*D_801928D8[])(void); +extern void func_80185C60(void *a0); +extern void (*D_80192968[])(void); +extern void func_80185CD8(void *a0); +extern s32 func_80128C98(s32 arg); +extern void func_80185D14(void *a0); +extern void func_80185D50(void *a0); +extern void func_80185D8C(void *a0); +extern void func_80185F9C(void); +extern void func_80185FA4(void *a0); +extern void func_80185FB4(void *a0); +extern void func_801EF624(void *a0); +extern void func_80186064(void *a0); +extern void func_801860A0(short *param_1); +extern void func_80186288(short *param_1); +extern void (*D_801929D4[])(void); +extern void func_801862B4(void *a0); +extern void func_801862F0(void * arg0); +extern void func_80186288(short*); +extern void func_8018640C(void *arg0); +extern void func_80186498(void * arg0); +extern s32 func_80186568(void *a0); +extern void func_801865E0(short *a0); +extern void (*D_80192A50[])(void); +extern void func_8018660C(void *a0); +extern void func_80186648(short *param); +extern void func_80186674(s32 a0); +extern void func_801865E0(short*); +extern void func_801866B4(s32 *a0); +extern void func_80186758(void * arg0); +extern void (*D_80192AE8[])(void); +extern void func_801868E0(void *a0); +extern void (*D_80192B10[])(void); +extern void func_8018691C(void *a0); +extern short D_80192AC8; +extern void func_80186958(short *param); +extern void func_801869C8(s32 arg0); +extern void func_80186A6C(void); +extern void func_80186A74(void); +extern void func_80186A7C(void); +extern void func_80186A84(void); +extern s32 func_80186D18(void); +extern void func_8012B2CC(s32 arg); +extern void func_80186D7C(void *arg0); +extern void func_80186F88(void); +extern void func_80186DDC(void *arg0); +extern void (*D_801C063C[])(void); +extern void func_80186F4C(void *a0); +extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2539) */ +extern void func_80172710(void); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2231) */ +extern s32 aF8018CB18(); +extern void func_80187004(void *a0); +extern s32 func_80187074(void); +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8018708C(void); +extern s32 func_8012BEE8(s32 a0); +extern void func_80186DAC(void *a0); +extern void func_801871E4(void *a0); +extern void func_8018724C(void); +extern void func_80187254(void); +extern void func_8018725C(void *a0); +extern void func_8018726C(void *a0); +extern s32 func_8018727C(void *a0, void *a1); +extern void func_8012A828(s32 arg0, s32 arg1); +extern void func_80187318(void *a0); +extern void func_80187344(void *a0); +extern void func_80187370(void *a0); +extern s32 func_801875C4(s32 arg0); +extern s32 func_80187420(s32 a0); +extern s32 func_80187420(s32 arg); +extern void func_80187584(void *a0); +extern void func_80187550(void *a0); +extern short D_800BA2BA; +extern void (*D_801C0B00[])(void); +extern void func_801875EC(void *a0); +extern void func_80187628(void); +extern void func_80187630(void *a0, s32 a1, s32 a2); +extern s32 func_80187690(u8 a0, u8 a1, u8 a2, u8 a3); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_801876E8(void *a0, s32 a1); +extern void func_80187770(void *a0); +extern void func_8012E8A8(u8 *a0); +extern s32 aF801877C0(); +extern s32 func_8018781C(void); +extern s32 func_80187890(void); +extern void func_80187960(void); +extern void func_8012B200(u8 *a0); +extern s32 func_80187C2C(s32 a0); +extern void (*D_801C0B20[])(void); +extern void func_80187C74(void *a0); +extern void func_80187CB0(void); +extern void func_80187CB8(void); +extern void func_80187CC0(void); +extern void func_80187CC8(void); +extern void func_80187CD0(void); +extern void func_80187CD8(void *a0); +extern void func_80187D1C(void); +extern void func_8001D0E8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80187D24(s32 a0); +extern void func_80188438(s32 a0); +extern void func_801883C4(s32 a0); +extern void func_80188498(s32 a0); +extern void func_8018835C(s32 a0); +extern void func_80187DAC(s32 a0); +extern void func_8001C97C(s32 a0); +extern void *func_8018872C(void *a0); +extern void func_80187F84(s32 a0); +extern void func_80188830(void *a0); +extern void func_80188124(void *a0); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern s32 func_801889AC(void); +extern void func_801881A0(s32 a0); +extern void func_8018826C(void); +extern void func_8018828C(s32 a0); +extern void func_80188518(s32 a0, s32 a1); +extern void func_80188AEC(s32 a0, s32 a1); +extern void func_80188570(s32 a0); +extern void func_801885D0(s32 a0); +extern void func_80188618(s32 a0); +extern void func_80188668(s32 a0); +extern s32 func_801887D0(void *a0); +extern s32 func_80188D68(void *a0); +extern void * func_8018872C(void *a0); +extern void func_801889E0(void *a0); +extern void aF80185EEC(); +extern void func_80188A14(void *a0, s32 a1, s32 a2); +extern void func_80188A78(s32 a0, s32 a1, s32 a2); +extern void (*D_801C0E1C[])(void); +extern void func_80188B44(void *a0); +extern void func_80188B80(void *a0); +extern void func_80188BFC(void *a0); +extern s32 func_80188E74(s32 a0); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012CB64(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8012F214(s32 arg0, s32 arg1, s32 arg2); +extern void func_80188ED0(void); +extern s16 D_801EEB10; +extern s32 func_80188F10(void); +extern void func_80029444(void); +extern void func_801754A8(void); +extern void func_80141C04(void); +extern void func_80188F6C(void); +extern void func_80189030(void); +extern s32 D_801151D0; +extern s16 D_80115126; +extern u8 D_80115138[]; +extern u8 D_80115148[]; +extern u16 D_801EF1EC; +extern s16 D_801EF1F0; +extern s16 D_801EF274; +extern s16 D_801EF278; +extern s16 D_801EF27C; +extern s16 D_801EF280; +extern s16 D_801EF284; +extern s16 D_801EF288; +extern s16 D_801EF28C; +extern s32 D_801EF258; +extern s32 D_801F4334; +extern s32 D_801F0D18; +extern s32 D_801F1374; +extern u8 D_801C1884[]; +extern s32 D_801C184C[]; +extern s32 resLoad_lastId; +extern s32 func_800149E0(s32 a0); +extern void func_80137B80(void); +extern s32 func_801376E8(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_80139A68(s32 a0, u16 a1); +extern s16 func_8014168C(s16 a0); +extern void func_8018B238(void); +extern s32 func_8018C000(s32 a0, s16 a1); +extern s16 func_8018C914(s32 a0); +extern void func_8018A3A8(void); +extern void func_801F1A24(s32 a0); +extern void func_8018C960(void); +extern void func_8018ABAC(void); +extern s32 func_8018AEE8(void); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern s32 *func_8018BCD4(s32 *, void *, s32, void *, s32); +extern s32 func_8018B644(void *, s32, s32, s32, s32 *); +extern s32 * func_8018B478(s32 *ot, Panel_8017E978_8018B478 *w0, s16 idx); +/* ==== end §8b carried decl layer ==== */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_8018B8DC; + +/* func_8018B8DC — ov_SC04_018 / ov_SC04_018_jr_801878E8, 254 ins, jtbl_801E599C (8 entries, + * minval 7 -> `addiu $a0,$a0,-7` + HImode re-extension, so the switch index type is short). + * + * Modelled on the ALREADY-MATCHED structural twin in the same overlay, + * src/ov_SC04_018/ov_SC04_018_jr_8013FFD8.c:1065 `func_8014032C` — same family: + * `result = D_801117EC;` default, `switch ((short)param_1)`, `((short)param_2)` at every use, + * `func_800291B4(D_8018E5C0[...]) & 0xFF` -> `result = D_8018E680[uVar3];`. + * Case bodies are emitted in SOURCE order, so the source order here is 10,7,8,13,14,11,default + * (read off the block order after the jr: 80188E70, 80188EB8, 80188F28, 80189004, 80189044, + * 80189108, 801891E0). + * + * Cases 9 and 12 are ABSENT from the source: their jtbl slots (indices 2 and 5) point at the + * default label 0x801891E0, which is also the out-of-range target of `beqz $v0,.L801891E0`. + * + * Three register/shape constraints read off the target: + * (a) each `& 0xFF` temp is BLOCK-SCOPED. A single function-scope temp gives one pseudo whose + * live range crosses the calls in cases 13/14, so gcc pins it to $s0; the target keeps it in + * $v1 / $v0 (dead before the call) and uses $s0 only for the value that IS live across a call. + * (b) case 14 uses u8 (QImode) locals. `lbu` into an s32 local is provably <=0xFF, so gcc folds + * `(v & 0xFF)` away; the target emits `andi $v1,$a0,0xFF` for the compare and + * `andi $s3,$a0,0xFF` for `n + 0x62`, which is the QImode-pseudo widening pattern. + * Case 13 has NO such andi, so there the local is s32 — the two cases are deliberately + * asymmetric (cookbook §160d). Case 14 also REUSES that one variable for `v + 1` + * (`v = v + 1`, not `u8 n = v + 1`): two pseudos gave `addiu $v0,$a0,1; andi $s3,$v0`, + * one pseudo gives the target's in-place `addiu $a0,$a0,1; andi $s3,$a0`. That was the + * last 2-instruction residual. + * (c) in case 11 the arms whose `lui/addiu $s1,%hi/%lo(sym)` sits BEFORE the branch (filling the + * `lw` load-delay slot) are assign-then-conditionally-override, not if/else: the address + * materialisation has to be in the SAME basic block as the load for the post-reload scheduler + * to hoist it. The arm at .L801891B4 keeps its `nop`, so that one is a plain `if`. + */ + + +s32 func_8018B8DC(s32 param_1, s32 param_2) { + extern void *func_8018C89C(s32 a0); + extern u8 D_801117EC[]; + extern u8 * D_801EF1D4; + extern u8 * D_801EF1DC; + extern u8 D_801EF298[]; + extern u8 D_8018E5C0[]; + extern void * D_8018E680[]; + extern void * D_801EB58C[]; + extern void * D_801C17B4[]; + extern void * D_801C17D0[]; + extern s32 * D_801EF254[]; + extern s16 D_8010EDEE; + extern u8 D_8010EDF2; + extern s16 D_800A6586[]; + extern u8 D_801F0700[]; + extern u8 D_801F0B80[]; + extern u8 D_801F44B4[]; + extern u8 D_801F44E0[]; + extern u8 D_801F44F8[]; + extern u8 D_801F4524[]; + + /* [T51] scoped in: these must not constrain the rest of the TU (cookbook §103). */ + + void *result; + + result = D_801117EC; + switch ((short)param_1) { + case 10: + if (D_80115126 != 5) { + result = D_8018E680[D_801EF1D4[(short)param_2]]; + } else { + result = D_801C17B4[(short)param_2]; + } + break; + + case 7: { + s32 t = func_800291B4(D_8018E5C0[(short)param_2]) & 0xFF; + if (t != 0) { + s32 idx = t * 0xC; + if (*(s16 *)((u8 *)&D_8010EDEE + idx) != 0 && + D_80115126 == *((u8 *)&D_8010EDF2 + idx)) { + result = func_8018C89C(((short)param_2 & 3) + 6); + func_80139A68(*(s16 *)((u8 *)&D_8010EDEE + idx), 0); + } else { + result = func_8018C89C(5); + } + } + break; + } + + case 8: + if (D_80115148[0] != 0) { + s32 t = func_800291B4(D_8018E5C0[(short)param_2]) & 0xFF; + if (t != 0) { + s32 idx = t * 0xC; + if (*(s16 *)((u8 *)&D_8010EDEE + idx) != 0 && + D_80115126 == *((u8 *)&D_8010EDF2 + idx)) { + result = func_8018C89C(((short)param_2 & 3) + 6); + func_80139A68(*(s16 *)((u8 *)&D_8010EDEE + idx), 0); + } else { + result = func_8018C89C(5); + } + } + } else { + s32 t = func_800291B4(D_8018E5C0[(short)param_2]) & 0xFF; + if (t != 0) { + result = D_8018E680[t]; + } + } + break; + + case 13: { + s32 e = D_801EF1DC[(short)param_2]; + if ((func_800291B4(e + 0x62) & 0x80) != 0) { + result = D_801EB58C[e]; + } + break; + } + + case 14: { + u8 v = D_801EF298[(short)param_2]; + if (v != 0xFF) { + s32 code; + v = v + 1; + code = v + 0x62; + if ((func_800291B4(code) & 0xF0) == 0xC0) { + result = func_8018C89C(((short)param_2 & 1) | 6); + func_80139A68((s16)(D_800A6586[v] * 9 / 10), 0); + } else if ((func_800291B4(code) & 0xF0) == 0xE0) { + result = D_801F0700; + } + } + break; + } + + case 11: + if (D_80115126 == 4) { + if (D_80115148[0] == 0) { + result = D_801F44B4; + if (D_801EF254[(short)param_2] == 0) { + result = D_801C17D0[(short)param_2]; + } + } else { + s32 *p = D_801EF254[(short)param_2]; + if (p != 0) { + result = D_801F4524; + if (p[1] != 0) { + result = D_801F44F8; + } + } else { + result = D_801F44E0; + } + } + } else { + if (D_801EF254[(short)param_2] != 0) { + result = D_801F0B80; + } + } + break; + + default: + result = func_8018C89C(0); + break; + } + return (s32)result; +} + + + + + + + + +/* Duplicate of the TU's own forward decl at ov_SC03_001_jr_8017AE2C.c:9324 (ABOVE the splice + * point, §138) — kept verbatim so the K&R definition below is checked against it. The 3rd + * parameter is `s32` in that prototype and `s16` here: a K&R identifier-list definition is + * compatible with a prototype carrying the DEFAULT-PROMOTED type, and the s16 spelling is what + * produces the target's per-use `sll/sra 16` off the raw $a2 kept in $s4. */ +extern s32 *func_8018BCD4(s32 *, void *, s32, void *, s32); + +s32 *func_8018BCD4(out, src, idx, w, col) + s32 *out; + void *src; + s16 idx; + void *w; + s32 col; +{ + extern short D_800B9A02; /* TU-visible spelling (file scope, line 2448) */ + extern s16 func_8014168C(s16 a0); + extern u16 D_8011511A; + extern u16 D_80115116; + extern u8 D_80115138[]; + extern u8 D_80115140[]; + extern u8 D_80115148[]; + extern u8 D_80115158[]; + extern u16 D_801C11BA; + extern u16 D_801C11CE; + + extern Env_8018BCD4 D_800AE7BC[]; + + + /* §37 /s-DEP LATTICE: this store MUST be MEM_IN_STRUCT_P. `out[0] = k` folds `out + 0` + * away and expands as a NON-/s mem, which keeps the true_dependence edge to the incoming + * 5th-arg slot and pins `lw $v1,0x38($sp)` after it. The target has the arg load AFTER + * the out[0] store, i.e. the edge must be DROPPED — sched.c's drop clause needs the store + * /s + varying and the load non-/s + fixed-address. A COMPONENT_REF at offset 0 supplies + * the /s. (This single bit was the last 10 of 203 instructions.) */ + + s32 c; + s16 t; + u16 *q; + s32 m; + volatile u16 *pbh; + + c = D_80115138[idx]; + + ((W_8018BCD4 *)out)->w = 0x04000000; + *((u8 *)out + 0xC) = 0x30; + *((u8 *)out + 0xD) = 0x48; + *(s16 *)((u8 *)out + 0xE) = 0x4056; + out[1] = col | 0x64000000; + + if (c < 10) { + /* §135 idiom 9/T3: the fleet decl returns s16; cast at the CALL so the return feeds + * `sll $v0,$v0,1` with no `andi`/re-extend. */ + t = ((s32 (*)(s16)) func_8014168C)(idx) * 2; + } else { + t = (D_80115148[idx * 2] - D_80115140[idx]) * 2; + } + + q = (u16 *)(t * 2 + (s32)src); + pbh = (volatile u16 *)&D_800B9A02; + *(s16 *)((u8 *)out + 0x8) = q[0] - 8; + *(s16 *)((u8 *)out + 0xA) = q[1]; + *(s16 *)((u8 *)out + 0x12) = 8; + *(s16 *)((u8 *)out + 0x10) = 8; + + /* §36 BITFIELD STORE = THE MASK-ORDER DECOUPLER. The head materializes 0x00FFFFFF + * (lui+ori) BEFORE 0xFF000000 (lui) while the body ANDs the dest first — the signature of + * expmed.c's store_fixed_bit_field, not of user-mask C. `volatile` on the index read is + * what keeps the SECOND *pbh load alive (a plain read cse-folds and the fn loses 5 ins). */ + ((PTag_8018BCD4 *)out)->addr = + ((PTag_8018BCD4 *)(D_800AE7BC[*pbh].ot + 2))->addr; + ((PTag_8018BCD4 *)(D_800AE7BC[*pbh].ot + 2))->addr = (u32)out; + + out += 5; + if (c < 10) { + return out; + } + + m = D_8011511A; + if (m == idx) { + if ((D_80115116 & 8) != 0) { + s16 j; + s32 k; + s16 y; + s16 eight; + u16 *pb; + /* §137/§36: m24 is a 2-insn constant, but the natural allocno order puts j/k ahead + * of it and rotates $a2/$a3/$t0. Pinning m24 alone restores the whole rotation. */ + register u32 m24 __asm__("$6"); + u32 mhi; + s32 vsum; + + j = 0; + k = m; + eight = 8; + pb = (u16 *)&D_800B9A02; + m24 = 0xFFFFFF; + mhi = 0xFF000000; + /* NOTE: the loop deliberately has NO source pointer of its own. gcc's combine_givs + * folds every `out + K` reference into ONE address giv based at out+0x12; adding a + * `u8 *p = (u8*)out + 0x12` biv makes `*(s16*)p` use the biv directly, which + * survives as a SECOND register (the +1-instruction LENGTH-DRIFT). The giv's base + * is the LAST such reference in source order — hence the +8 (`vsum`) store sits + * before the 0x10/0x12 stores here even though the scheduler sinks it back. */ + for (; j < 2; j++) { + if (j == 0) { + if (D_80115140[k] == 0) { + continue; + } + *((u8 *)out + 0xD) = 0x30; + y = D_801C11BA - 2; + } else { + s32 k2 = k * 2; + if ((((s8 *)D_80115158)[k2] - ((s8 *)D_80115140)[k]) < 7) { + continue; + } + *((u8 *)out + 0xD) = 0x38; + y = D_801C11CE + 1; + } + *(s16 *)((u8 *)out + 0xA) = y; + __asm__("" ::: "memory"); /* keeps the y store ahead of the 0x64808080 pair */ + *(u32 *)out = 0x04000000; + *((u8 *)out + 0xC) = 0x78; + *(u32 *)((u8 *)out + 0x4) = 0x64808080; + *(s16 *)((u8 *)out + 0xE) = 0x4056; + vsum = *(s32 *)((u8 *)w + 8) + *(s32 *)((u8 *)w + 0xC) - 0xC; + *(s16 *)((u8 *)out + 0x8) = vsum; + *(s16 *)((u8 *)out + 0x10) = eight; + *(s16 *)((u8 *)out + 0x12) = eight; + *(u32 *)out = ((*(u32 *)out) & mhi) | (D_800AE7BC[*pb].ot[2] & m24); + { + register u32 *op __asm__("$4"); + op = D_800AE7BC[*pb].ot; + op[2] = (op[2] & mhi) | (((u32)out) & m24); + } + out += 5; + } + } + } + return out; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018B8DC", func_8018C000); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018B8DC", func_8018C89C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018B8DC", func_8018C8D4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018B8DC", func_8018C914); + +#include "common.h" + +/* func_8018C960 — ov_SC03_001 (133 ins), exemplar of a 5-member open-only + * h_norm cluster. Builds the full-screen fade overlay: a DR_MODE-style 8-byte + * GP0 packet (0xE1000015), a 320x240 semi-transparent gouraud quad (POLY_G4, + * code 0x3A), and a second 8-byte GP0 packet (0xE1000240), each linked into the + * current OT with the psyq `addPrim` idiom. The type shapes and the + * `((PTag *)x)->addr = ((PTag *)ot)->addr; ((PTag *)ot)->addr = (u32)x;` pair + * are copied VERBATIM from the already-matched neighbour func_8018BCD4 in this + * same TU (§71) — Env_* / PTag_* there are the fleet-canonical shapes. + * + * Levers that were load-bearing (all byte-tested; the draft is PIN-FREE): + * §20 &D_801151D0 / &D_800B9A02 taken into pointer LOCALS -> each address is + * force_reg'd once (lui+addiu -> $t2 / $a3) instead of a %lo per use. + * §36 the 24-bit BITFIELD store, not a hand-written mask, is what emits + * 0x00FFFFFF (lui+ori) ahead of 0xFF000000 (lui) while the body ANDs the + * destination first — expmed's store_fixed_bit_field signature. + * §37 asm-label aliases for D_801EF1EC/D_801EF1F0: the TU canon is u16/s16 + * but the target does a bare `lbu %lo(sym)`, and a plain block-scope + * `extern u8` would be a conflicting redeclaration. + * --- `volatile` on the OT index read keeps all SIX *pbh loads alive; a plain + * read cse-folds them and the function loses ~25 instructions. + * S1 the whole body is ONE branch-free basic block and every store ties at + * the same priority, so forward asm order == source statement order — + * the POLY_G4 block below is a literal transcription of the target. + * S2 `p` is destructively updated (multi-set -> no birthing boost) so its + * `addiu +8` floats up into the preceding load-delay gap, while `r` is a + * FRESH single-set local (boosted) so its `addiu +0x24` sinks to sit + * immediately before `sb 3($a0)`. Both placements are the target's. + * --- the bare `p = r;` before r's uses is a COMBINE BARRIER: without a SET + * of `p` between `r = p + 9` and r's first use, `can_combine_p` lets + * combine substitute `r` -> `p + 0x24` into every MEM offset and the + * `addiu` disappears entirely (and, at the tail, `p += 2` folds to + * `addiu $t3,$t3,0x2C` off the stale base instead of `addiu $t3,$a0,8`). + * It also fixes the register rotation for free — verified that adding or + * removing `register __asm__` pins on p/r/pbh is a byte no-op. + */ + +/* ---- TU-visible spellings (file scope of ov_SC03_001_jr_8018A3A8.c) ---- */ +extern s16 D_800B9A02; +extern s32 D_801151D0; +extern u16 D_801EF1EC; +extern s16 D_801EF1F0; + +void func_8018C960(void) { + /* §100/§120: draft-local, uniquely-named types — they live in the BODY so + * they cannot collide with the TU's own Env_8018BCD4 / PTag_8018BCD4. */ + typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018C960; + typedef struct { u32 *ot; u32 pad[4]; } Env_8018C960; /* 0x14 stride */ + typedef struct { + u32 tag; /* 0x00 */ + u8 r0, g0, b0, code; /* 0x04..0x07 */ + s16 x0, y0; /* 0x08, 0x0A */ + u8 r1, g1, b1, p1; /* 0x0C..0x0F */ + s16 x1, y1; /* 0x10, 0x12 */ + u8 r2, g2, b2, p2; /* 0x14..0x17 */ + s16 x2, y2; /* 0x18, 0x1A */ + u8 r3, g3, b3, p3; /* 0x1C..0x1F */ + s16 x3, y3; /* 0x20, 0x22 */ + } PG4_8018C960; /* -> 0x24 */ + + extern Env_8018C960 D_800AE7BC[]; + extern u8 aD801EF1EC __asm__("D_801EF1EC"); + extern u8 aD801EF1F0 __asm__("D_801EF1F0"); + + u32 **pp; + volatile u16 *pbh; + u32 *p; + u32 *r; + u8 c1, c2; + + pp = (u32 **)&D_801151D0; + pbh = (volatile u16 *)&D_800B9A02; + + p = *pp; + ((PTag_8018C960 *)p)->len = 1; + p[1] = 0xE1000015; + ((PTag_8018C960 *)p)->addr = ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; + + p += 2; + ((PG4_8018C960 *)p)->tag = 0x08000000; + ((PG4_8018C960 *)p)->code = 0x3A; + ((PG4_8018C960 *)p)->x2 = -160; + ((PG4_8018C960 *)p)->x0 = -160; + ((PG4_8018C960 *)p)->x3 = 160; + ((PG4_8018C960 *)p)->x1 = 160; + c1 = aD801EF1EC; + ((PG4_8018C960 *)p)->b1 = c1; + ((PG4_8018C960 *)p)->b0 = c1; + ((PG4_8018C960 *)p)->g1 = c1; + ((PG4_8018C960 *)p)->g0 = c1; + ((PG4_8018C960 *)p)->r1 = c1; + ((PG4_8018C960 *)p)->r0 = c1; + c2 = aD801EF1F0; + ((PG4_8018C960 *)p)->y1 = -120; + ((PG4_8018C960 *)p)->b3 = c2; + ((PG4_8018C960 *)p)->b2 = c2; + ((PG4_8018C960 *)p)->g3 = c2; + ((PG4_8018C960 *)p)->g2 = c2; + ((PG4_8018C960 *)p)->r3 = c2; + ((PG4_8018C960 *)p)->r2 = c2; + ((PG4_8018C960 *)p)->y0 = -120; + ((PG4_8018C960 *)p)->y3 = 120; + ((PG4_8018C960 *)p)->y2 = 120; + + ((PTag_8018C960 *)p)->addr = ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; + + r = p + 9; /* 0x24 */ + p = r; /* COMBINE BARRIER — see header */ + ((PTag_8018C960 *)r)->len = 1; + r[1] = 0xE1000240; + ((PTag_8018C960 *)r)->addr = ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960 *)D_800AE7BC[*pbh].ot)->addr = (u32)r; + + p += 2; + *pp = p; +} + + + +extern void (*D_801EB364[])(void); + +void func_8018CB74(void *a0) { + D_801EB364[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801EB344[]; + +void func_8018CBB0(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801EB344[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801EB344)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801EB344[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801EB378[])(void); + +void func_8018CC74(void *a0) { + D_801EB378[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8018CBB0(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_8018CCB0(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_8018CBB0(param_1, -0x80); + func_8018CBB0(param_1, -0x30); + func_8018CBB0(param_1, 0x20); + func_8018CBB0(param_1, 0x70); + func_8018CBB0(param_1, 0xc0); + } + if (1 < uVar1) { + func_8018CBB0(param_1, -0x58); + func_8018CBB0(param_1, -0x8); + func_8018CBB0(param_1, 0x48); + func_8018CBB0(param_1, 0x98); + func_8018CBB0(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_8018CBB0(s32, s32); + +void func_8018CD98(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_8018CBB0(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801EB36C; + +void func_8018CDD8(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801EB36C, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_8018CE60(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018B8DC", func_8018CEA8); + + +extern void (*D_801EB48C[])(void); + +void func_8018CF54(void *a0) { + D_801EB48C[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +/* Declarations conformed to the TU (ov_SC04_018_jr_8017AE2C.c) — lever (A): + * func_8012A828 : TU declares `extern void ((void (*)(s32*, s32))func_8012A828)(s32*, s32);` + * at L3460 / L4615 / L5083 / L5372 / L5859 / L6004 / L6155 / + * L6479 / L6504 / L6529. The draft's `(s32, s32)` form caused + * the 7697-vs-6529 conflict. Conformed here; the type + * disagreement is pushed to a cast at the call site. + * D_8018D838 : TU declares `extern u8 D_8018D838[];` (block scope, L3467). + * Conformed; `(s32)D_8018D838` == `(s32)&D_8018D838`. + * func_801788B8 : verbatim from TU L2532 / L7756 (below the splice point). + * func_8012C354, D_801EB390, func_8018D088, func_8018CF90 : no other + * declaration anywhere in the TU (func_8018D088 / func_8018CF90 + * appear only as INCLUDE_ASM, which emits no C declaration). + * + * Body: the original draft was NOT byte-correct. `*(u16 *)(x + 2) = 1;` must be + * sequenced BEFORE the func_8012A828 call, not after it — with it after, gcc + * coalesces the store base onto $a0 (`sh v0,2(a0)`) and re-emits the arg copy, + * giving a 6-instruction ADDRESSING/cse diff. Moved above the call; both stores + * now retire off $s0 and the sh lands in the jal delay slot, as in the target. */ + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8012A828(s32, s32); +extern s32 func_801788B8(s32 arg0, s32 arg1); + +extern void func_8018D088(void); + +void func_8018CF90(s32 a0) { + + extern M2C_UNK D_801EB390; + extern u8 D_8018D838[]; + s32 s0 = a0; + if (func_8012C354(a0, (s32)&D_801EB390)) { + *(u8 *)(s0 + 0xC0) = 1; + *(u16 *)(s0 + 0x2) = 1; + ((void (*)(s32*, s32))func_8012A828)((s32 *)s0, (s32)D_8018D838); + func_801788B8(s0, (s32)func_8018D088); + } +} + + +void func_8018CFF4(void) { +} + + +extern void func_80178CBC(s32 *a0, s32 a1); + +void func_8018CFFC(s32 *a0) +{ + + extern signed char D_801EB468[]; + s32 v0; + + v0 = *(s16 *)((s32)a0 + 0x70); + v0 = v0 * 4; + func_80178CBC(a0, *(s32 *)((s32)D_801EB468 + v0)); + *(s16 *)((s32)a0 + 0x2) = 0x3; +} + + + +extern int func_80178970(void); +extern void func_80178D18(void); + +void func_8018D048(s32 a0) { + if (func_80178970() != 0) { + ((void (*)(s32))func_80178D18)(a0); + *(s16 *)(a0 + 2) = 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018B8DC", func_8018D088); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018B8DC", func_8018D0E4); + + + + + + + diff --git a/src/ov_SC03_124/ov_SC03_124_jr_80187010.c b/src/ov_SC03_124/ov_SC03_124_jr_80187010.c index 0adfe4f23d..5f0158a93b 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_80187010.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_80187010.c @@ -3632,570 +3632,3 @@ s32 *func_801880E0(s32 *ot, Panel_8017E978_801880E0 *w0, s16 idx) { INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_801882AC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_80188544); - -/* func_8018893C — twin of the byte-matched func_8018BCD4 in ov_SC03_001/ov_SC03_001_jr_8017AE2C.c - * (family of 4: this fn + ov_SC04_018/func_80189214 + ov_SC04_019/func_80189214 + - * ov_SC05_017/func_80188F14; all normalize byte-identical to this shape). Only the two - * overlay-local data symbols differ (D_801BC522/D_801BC536 here vs D_801C11BA/D_801C11CE - * there). Caller in this TU (func_801880E0) already declares the matching prototype: - * extern s32 *func_8018893C(s32 *, void *, s32, void *, s32); - */ - -extern s32 *func_8018893C(s32 *, void *, s32, void *, s32); - -s32 *func_8018893C(out, src, idx, w, col) - s32 *out; - void *src; - s16 idx; - void *w; - s32 col; -{ - extern short D_800B9A02; /* TU-visible spelling (file scope) */ - extern s16 func_8014168C(s16 a0); - extern u16 D_8011511A; - extern u16 D_80115116; - extern u8 D_80115138[]; - extern u8 D_80115140[]; - extern u8 D_80115148[]; - extern u8 D_80115158[]; - extern u16 D_801BC522; - extern u16 D_801BC536; - - extern Env_8018893C D_800AE7BC[]; - - - /* §37 /s-DEP LATTICE: this store MUST be MEM_IN_STRUCT_P. `out[0] = k` folds `out + 0` - * away and expands as a NON-/s mem, which keeps the true_dependence edge to the incoming - * 5th-arg slot and pins `lw $v1,0x38($sp)` after it. The target has the arg load AFTER - * the out[0] store, i.e. the edge must be DROPPED — sched.c's drop clause needs the store - * /s + varying and the load non-/s + fixed-address. A COMPONENT_REF at offset 0 supplies - * the /s. */ - - s32 c; - s16 t; - u16 *q; - s32 m; - volatile u16 *pbh; - - c = D_80115138[idx]; - - ((W_8018893C *)out)->w = 0x04000000; - *((u8 *)out + 0xC) = 0x30; - *((u8 *)out + 0xD) = 0x48; - *(s16 *)((u8 *)out + 0xE) = 0x4056; - out[1] = col | 0x64000000; - - if (c < 10) { - /* §135 idiom 9/T3: the fleet decl returns s16; cast at the CALL so the return feeds - * `sll $v0,$v0,1` with no `andi`/re-extend. */ - t = ((s32 (*)(s16)) func_8014168C)(idx) * 2; - } else { - t = (D_80115148[idx * 2] - D_80115140[idx]) * 2; - } - - q = (u16 *)(t * 2 + (s32)src); - pbh = (volatile u16 *)&D_800B9A02; - *(s16 *)((u8 *)out + 0x8) = q[0] - 8; - *(s16 *)((u8 *)out + 0xA) = q[1]; - *(s16 *)((u8 *)out + 0x12) = 8; - *(s16 *)((u8 *)out + 0x10) = 8; - - /* §36 BITFIELD STORE = THE MASK-ORDER DECOUPLER. The head materializes 0x00FFFFFF - * (lui+ori) BEFORE 0xFF000000 (lui) while the body ANDs the dest first. `volatile` on the - * index read is what keeps the SECOND *pbh load alive (a plain read cse-folds and the - * fn loses 5 ins). */ - ((PTag_8018893C *)out)->addr = - ((PTag_8018893C *)(D_800AE7BC[*pbh].ot + 2))->addr; - ((PTag_8018893C *)(D_800AE7BC[*pbh].ot + 2))->addr = (u32)out; - - out += 5; - if (c < 10) { - return out; - } - - m = D_8011511A; - if (m == idx) { - if ((D_80115116 & 8) != 0) { - s16 j; - s32 k; - s16 y; - s16 eight; - u16 *pb; - /* §137/§36: m24 is a 2-insn constant, but the natural allocno order puts j/k ahead - * of it and rotates $a2/$a3/$t0. Pinning m24 alone restores the whole rotation. */ - register u32 m24 __asm__("$6"); - u32 mhi; - s32 vsum; - - j = 0; - k = m; - eight = 8; - pb = (u16 *)&D_800B9A02; - m24 = 0xFFFFFF; - mhi = 0xFF000000; - /* NOTE: the loop deliberately has NO source pointer of its own. gcc's combine_givs - * folds every `out + K` reference into ONE address giv based at out+0x12; adding a - * `u8 *p = (u8*)out + 0x12` biv makes `*(s16*)p` use the biv directly, which - * survives as a SECOND register (the +1-instruction LENGTH-DRIFT). The giv's base - * is the LAST such reference in source order — hence the +8 (`vsum`) store sits - * before the 0x10/0x12 stores here even though the scheduler sinks it back. */ - for (; j < 2; j++) { - if (j == 0) { - if (D_80115140[k] == 0) { - continue; - } - *((u8 *)out + 0xD) = 0x30; - y = D_801BC522 - 2; - } else { - s32 k2 = k * 2; - if ((((s8 *)D_80115158)[k2] - ((s8 *)D_80115140)[k]) < 7) { - continue; - } - *((u8 *)out + 0xD) = 0x38; - y = D_801BC536 + 1; - } - *(s16 *)((u8 *)out + 0xA) = y; - __asm__("" ::: "memory"); /* keeps the y store ahead of the 0x64808080 pair */ - *(u32 *)out = 0x04000000; - *((u8 *)out + 0xC) = 0x78; - *(u32 *)((u8 *)out + 0x4) = 0x64808080; - *(s16 *)((u8 *)out + 0xE) = 0x4056; - vsum = *(s32 *)((u8 *)w + 8) + *(s32 *)((u8 *)w + 0xC) - 0xC; - *(s16 *)((u8 *)out + 0x8) = vsum; - *(s16 *)((u8 *)out + 0x10) = eight; - *(s16 *)((u8 *)out + 0x12) = eight; - *(u32 *)out = ((*(u32 *)out) & mhi) | (D_800AE7BC[*pb].ot[2] & m24); - { - register u32 *op __asm__("$4"); - op = D_800AE7BC[*pb].ot; - op[2] = (op[2] & mhi) | (((u32)out) & m24); - } - out += 5; - } - } - } - return out; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_80188C68); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_80189504); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018953C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018957C); - - -/* func_801895C8 — ov_SC03_001 (133 ins), exemplar of a 5-member open-only - * h_norm cluster. Builds the full-screen fade overlay: a DR_MODE-style 8-byte - * GP0 packet (0xE1000015), a 320x240 semi-transparent gouraud quad (POLY_G4, - * code 0x3A), and a second 8-byte GP0 packet (0xE1000240), each linked into the - * current OT with the psyq `addPrim` idiom. The type shapes and the - * `((PTag *)x)->addr = ((PTag *)ot)->addr; ((PTag *)ot)->addr = (u32)x;` pair - * are copied VERBATIM from the already-matched neighbour func_8018BCD4 in this - * same TU (§71) — Env_* / PTag_* there are the fleet-canonical shapes. - * - * Levers that were load-bearing (all byte-tested; the draft is PIN-FREE): - * §20 &D_801151D0 / &D_800B9A02 taken into pointer LOCALS -> each address is - * force_reg'd once (lui+addiu -> $t2 / $a3) instead of a %lo per use. - * §36 the 24-bit BITFIELD store, not a hand-written mask, is what emits - * 0x00FFFFFF (lui+ori) ahead of 0xFF000000 (lui) while the body ANDs the - * destination first — expmed's store_fixed_bit_field signature. - * §37 asm-label aliases for D_801E2364/D_801E2368: the TU canon is u16/s16 - * but the target does a bare `lbu %lo(sym)`, and a plain block-scope - * `extern u8` would be a conflicting redeclaration. - * --- `volatile` on the OT index read keeps all SIX *pbh loads alive; a plain - * read cse-folds them and the function loses ~25 instructions. - * S1 the whole body is ONE branch-free basic block and every store ties at - * the same priority, so forward asm order == source statement order — - * the POLY_G4 block below is a literal transcription of the target. - * S2 `p` is destructively updated (multi-set -> no birthing boost) so its - * `addiu +8` floats up into the preceding load-delay gap, while `r` is a - * FRESH single-set local (boosted) so its `addiu +0x24` sinks to sit - * immediately before `sb 3($a0)`. Both placements are the target's. - * --- the bare `p = r;` before r's uses is a COMBINE BARRIER: without a SET - * of `p` between `r = p + 9` and r's first use, `can_combine_p` lets - * combine substitute `r` -> `p + 0x24` into every MEM offset and the - * `addiu` disappears entirely (and, at the tail, `p += 2` folds to - * `addiu $t3,$t3,0x2C` off the stale base instead of `addiu $t3,$a0,8`). - * It also fixes the register rotation for free — verified that adding or - * removing `register __asm__` pins on p/r/pbh is a byte no-op. - */ - -/* ---- TU-visible spellings (file scope of ov_SC03_001_jr_8018A3A8.c) ---- */ - -void func_801895C8(void) { - - extern s32 D_801151D0; - extern u16 D_801E2364; - extern s16 D_801E2368; - /* §100/§120: draft-local, uniquely-named types — they live in the BODY so - * they cannot collide with the TU's own Env_8018BCD4 / PTag_8018BCD4. */ - typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018C960_801895C8; - typedef struct { u32 *ot; u32 pad[4]; } Env_8018C960_801895C8; /* 0x14 stride */ - typedef struct { - u32 tag; /* 0x00 */ - u8 r0, g0, b0, code; /* 0x04..0x07 */ - s16 x0, y0; /* 0x08, 0x0A */ - u8 r1, g1, b1, p1; /* 0x0C..0x0F */ - s16 x1, y1; /* 0x10, 0x12 */ - u8 r2, g2, b2, p2; /* 0x14..0x17 */ - s16 x2, y2; /* 0x18, 0x1A */ - u8 r3, g3, b3, p3; /* 0x1C..0x1F */ - s16 x3, y3; /* 0x20, 0x22 */ - } PG4_8018C960_801895C8; /* -> 0x24 */ - - extern Env_8018C960_801895C8 D_800AE7BC[]; - extern u8 aD801EF1EC __asm__("D_801E2364"); - extern u8 aD801EF1F0 __asm__("D_801E2368"); - - u32 **pp; - volatile u16 *pbh; - u32 *p; - u32 *r; - u8 c1, c2; - - pp = (u32 **)&D_801151D0; - pbh = (volatile u16 *)&D_800B9A02; - - p = *pp; - ((PTag_8018C960_801895C8 *)p)->len = 1; - p[1] = 0xE1000015; - ((PTag_8018C960_801895C8 *)p)->addr = ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; - - p += 2; - ((PG4_8018C960_801895C8 *)p)->tag = 0x08000000; - ((PG4_8018C960_801895C8 *)p)->code = 0x3A; - ((PG4_8018C960_801895C8 *)p)->x2 = -160; - ((PG4_8018C960_801895C8 *)p)->x0 = -160; - ((PG4_8018C960_801895C8 *)p)->x3 = 160; - ((PG4_8018C960_801895C8 *)p)->x1 = 160; - c1 = aD801EF1EC; - ((PG4_8018C960_801895C8 *)p)->b1 = c1; - ((PG4_8018C960_801895C8 *)p)->b0 = c1; - ((PG4_8018C960_801895C8 *)p)->g1 = c1; - ((PG4_8018C960_801895C8 *)p)->g0 = c1; - ((PG4_8018C960_801895C8 *)p)->r1 = c1; - ((PG4_8018C960_801895C8 *)p)->r0 = c1; - c2 = aD801EF1F0; - ((PG4_8018C960_801895C8 *)p)->y1 = -120; - ((PG4_8018C960_801895C8 *)p)->b3 = c2; - ((PG4_8018C960_801895C8 *)p)->b2 = c2; - ((PG4_8018C960_801895C8 *)p)->g3 = c2; - ((PG4_8018C960_801895C8 *)p)->g2 = c2; - ((PG4_8018C960_801895C8 *)p)->r3 = c2; - ((PG4_8018C960_801895C8 *)p)->r2 = c2; - ((PG4_8018C960_801895C8 *)p)->y0 = -120; - ((PG4_8018C960_801895C8 *)p)->y3 = 120; - ((PG4_8018C960_801895C8 *)p)->y2 = 120; - - ((PTag_8018C960_801895C8 *)p)->addr = ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; - - r = p + 9; /* 0x24 */ - p = r; /* COMBINE BARRIER — see header */ - ((PTag_8018C960_801895C8 *)r)->len = 1; - r[1] = 0xE1000240; - ((PTag_8018C960_801895C8 *)r)->addr = ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr = (u32)r; - - p += 2; - *pp = p; -} - - - -extern void (*D_801D52BC[])(void); - -void func_801897DC(void *a0) { - D_801D52BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801D529C[]; - -void func_80189818(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801D529C[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801D529C)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801D529C[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801D52D0[])(void); - -void func_801898DC(void *a0) { - D_801D52D0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_80189818(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_80189918(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_80189818(param_1, -0x80); - func_80189818(param_1, -0x30); - func_80189818(param_1, 0x20); - func_80189818(param_1, 0x70); - func_80189818(param_1, 0xc0); - } - if (1 < uVar1) { - func_80189818(param_1, -0x58); - func_80189818(param_1, -0x8); - func_80189818(param_1, 0x48); - func_80189818(param_1, 0x98); - func_80189818(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_80189818(s32, s32); - -void func_80189A00(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_80189818(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801D52C4; - -void func_80189A40(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801D52C4, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_80189AC8(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_80189B10); - - -extern void (*D_801DE38C[])(void); - -void func_80189BBC(void *a0) { - D_801DE38C[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -/* Declarations conformed to the TU (ov_SC04_018_jr_8017AE2C.c) — lever (A): - * func_8012A828 : TU declares `extern void ((void (*)(s32*, s32))func_8012A828)(s32*, s32);` - * at L3460 / L4615 / L5083 / L5372 / L5859 / L6004 / L6155 / - * L6479 / L6504 / L6529. The draft's `(s32, s32)` form caused - * the 7697-vs-6529 conflict. Conformed here; the type - * disagreement is pushed to a cast at the call site. - * D_8018AEDC : TU declares `extern u8 D_8018AEDC[];` (block scope, L3467). - * Conformed; `(s32)D_8018AEDC` == `(s32)&D_8018AEDC`. - * func_801788B8 : verbatim from TU L2532 / L7756 (below the splice point). - * func_8012C354, D_801DE278, func_80189CF0, func_80189BF8 : no other - * declaration anywhere in the TU (func_80189CF0 / func_80189BF8 - * appear only as INCLUDE_ASM, which emits no C declaration). - * - * Body: the original draft was NOT byte-correct. `*(u16 *)(x + 2) = 1;` must be - * sequenced BEFORE the func_8012A828 call, not after it — with it after, gcc - * coalesces the store base onto $a0 (`sh v0,2(a0)`) and re-emits the arg copy, - * giving a 6-instruction ADDRESSING/cse diff. Moved above the call; both stores - * now retire off $s0 and the sh lands in the jal delay slot, as in the target. */ - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8012A828(s32, s32); -extern s32 func_801788B8(s32 arg0, s32 arg1); - -extern void func_80189CF0(void); - -void func_80189BF8(s32 a0) { - - extern M2C_UNK D_801DE278; - extern u8 D_8018AEDC[]; - s32 s0 = a0; - if (func_8012C354(a0, (s32)&D_801DE278)) { - *(u8 *)(s0 + 0xC0) = 1; - *(u16 *)(s0 + 0x2) = 1; - ((void (*)(s32*, s32))func_8012A828)((s32 *)s0, (s32)D_8018AEDC); - func_801788B8(s0, (s32)func_80189CF0); - } -} - - -void func_80189C5C(void) { -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - -void func_80189C64(s32 *a0) -{ - - extern signed char D_801DE368[]; - s32 v0; - - v0 = *(s16 *)((s32)a0 + 0x70); - v0 = v0 * 4; - func_80178CBC(a0, *(s32 *)((s32)D_801DE368 + v0)); - *(s16 *)((s32)a0 + 0x2) = 0x3; -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_80189CB0(s32 a0) { - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_80189CF0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_80189D4C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_80189F00); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018A250); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018A3C8); - - -extern void func_8012E8E0(s32 a0, s32 a1); - -void func_8018A470(s32 arg0) -{ - - extern s32 D_801DE4EC; - s32 v1; - - *(short *)(arg0 + 0x2) = 3; - *(short *)(arg0 + 0x34) = 0; - func_8012E8E0(arg0, (s32)&D_801DE4EC); - v1 = *(s32 *)(arg0 + 0x68); - *(short *)(v1 + 0xC) = 0x7FFF; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018A4B8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018A594); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018A5B8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018A61C); - - - - - - - - - - - - - - - - - -extern void func_80131E00(struct S80131E00 *a0, s32 a1); -void func_8018A698(void) -{ - int new_var; - ((void (*)(s32, s32)) func_80131E00)(new_var, 3); - new_var = 0x80C70000; -} - -void func_8018A6B8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018A6C0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80187010", func_8018A788); - - - - - diff --git a/src/ov_SC03_124/ov_SC03_124_jr_80188544.c b/src/ov_SC03_124/ov_SC03_124_jr_80188544.c new file mode 100644 index 0000000000..4df9c04bb0 --- /dev/null +++ b/src/ov_SC03_124/ov_SC03_124_jr_80188544.c @@ -0,0 +1,3752 @@ +#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 { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +typedef void (*Handler)(struct Entry_8016E95C *); +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D0E8; +extern u8 D_8018D058; +extern u8 D_8018D034; +extern u8 D_8018D010; +extern u8 D_8018D0C4; +extern u8 D_8018D0A0; +extern u8 D_8018D07C; +extern u8 D_8018CFEC; +extern void func_80145934(void); +extern u8 D_8018D178; +extern u8 D_8018D154; +extern u8 D_8018D130; +extern u8 D_8018D10C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +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 s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C570[]; +extern unsigned char D_8018C5A0[]; +extern unsigned char D_8018C5F0[]; +extern unsigned char D_8018C620[]; +extern unsigned char D_8018C650[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6A0[])(void *); +extern u8 D_80126BA4; +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 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_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +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 s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +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_80015954(s32 a0, s32 a1); +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 s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +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 void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +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(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +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_80147478(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_800484EC(s32 a0, s32 a1, s32 a2); +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 void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(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_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 u8 D_800B9A64; +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_80047D3C(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_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_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +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 void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +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 void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +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_80149FA8(void); +extern s32 D_8018C768[]; +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 s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +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_80016714(void *a0, s32 a1); +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 void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +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 void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +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_8014B5B0(s32 *a0); +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_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(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 s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(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_8014C088(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 arg0, s32 arg1, void *arg2); +extern u8 D_8018C7F0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +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 ratan2(s32 dx, s32 dy); +extern u8 D_8018C7F8; +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 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 void func_8014C978(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 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_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +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 void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); +extern s32 func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +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 s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +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 s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +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_8014E6F8(struct SubE6F8 *a0); +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 s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +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_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0650; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0654; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(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 short func_801508F8(s32 a0); +extern s32 D_8018C828; +extern s32 D_80126990; +extern s32 D_80126994; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 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_8012DB84(void); +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_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 s32 func_80151944(void); +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_80154A74(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 void (*D_8018C8D0[])(void); +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_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C8F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C8E4; +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 (*D_8018C908[])(void); +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 u8 D_8018C914[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C924[])(void); +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 (*D_8018C93C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C92C; +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 (*D_8018C950[])(void); +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 (*D_8018C96C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C95C; +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 (*D_8018C980[])(void); +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 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 (*D_8018C994[])(void); +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 (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +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 s32 D_8018C9A8; +extern void (*D_8018C9D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +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_800183E0(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_80029178(s32); +extern int (*D_8018CA1C[])(void); +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 void (*D_8018CA20[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(s16 *a0, s16 *a1); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CE84[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CE94[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern s32 func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E0688; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CEBC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CE9C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CEAC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018CEFC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018CF04[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CED0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018CF10[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CEE0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E0690; +extern s32 D_801E069C; +extern s32 D_801E06A0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018CF4C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018CF20[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0698; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D19C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018CFBC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D240[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D394[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D1B0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D39C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D1C0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D1E0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018D3A4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(s32 arg0); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018D3CC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018D3D8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern void func_8015CC40(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018D24C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018D47C; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018C560[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018D490[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018D4CC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018D514; +extern u16 D_8018D516; +extern u16 D_8018D518; +extern s32 D_8018D51C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018D524; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018D230; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018D5A8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018D658[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018D688[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018D6EC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E06A8[]; +extern void func_8016216C(void); +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018D710[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E0700[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018D758[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018D748; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801DFB40[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018D760[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018D7B4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018D77C; +extern s16 D_8018D7B0; +extern s16 D_8018D7AE; +extern s16 D_8018D7AC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018D7C0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E0760; +extern u8 D_801E0761; +extern u8 D_801E0762; +extern u8 D_801E0763; +extern u8 D_801E0764; +extern u8 D_801E0765; +extern u8 D_801E0766; +extern u8 D_801E0767; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018D7D0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E07A0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018D814[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018D890[]; +extern s32 D_8018D8B0[]; +extern u8 D_8018D92C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018D94C[]; +extern u8 D_8018D96C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018DA08[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018DA84[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801DFB50; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018DA90[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018DA98[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018DB60[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018DB70[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018DB80[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018DB8C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018DAEC[]; +extern u8 D_8018DB00[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018DBA4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018DBAC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018DBB4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018DBBC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018DBC4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018DBCC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018DBD4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018DC88[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018DC90[])(void); +extern void func_80169F00(void *a0); +extern char D_8018DC40[]; +extern char D_8018DC00[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018DCC8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018DCD4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018DD1C[])(void); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018DD98[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E0AC0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018DD8C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018DDD0[]; +extern unsigned short D_8018DDD8[]; +extern unsigned short D_8018DDE0[]; +extern unsigned char D_801E0AC8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E0AC0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018DDE8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E0BFC; +extern M2C_UNK D_801E0C00; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E0B88; +extern void (*D_8018DE18[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E0C04[]; +extern u8 D_801E0C0C[]; +extern u8 D_801E0BBC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018DE20[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018DE3C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018DE44[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DEAC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018DE50; +extern u8 D_8018DE5C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018DEE0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018DEE8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018DF3C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018DF70[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018DF60[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018DF8C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32 _arg0); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E004[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E00C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E014[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E01C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E024[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E02C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E038[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018E044[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018E050[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018E060[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018E070[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018E078[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018E080[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018E088[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018E090[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018E098[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018E0A0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018E0A8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018E0B0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018E0B8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018E0C0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018E0C8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018E0D0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018E0D8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018E0E0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018E0E8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018E0F0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018E0F8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018E100[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018E108[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018E110[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018E118[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018E120[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018E164[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018E128; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018E194[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018E1D0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern void func_801748EC(void); +extern s32 func_801749C8(); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018E228[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018E238[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018E240[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175494(void); +extern void (*D_8018E3A8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018E3B4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801DFD98; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801789AC(s32 arg0); +extern s16 D_801E2570; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern short D_801E25E4; +extern void func_80178D18(void); +extern s32 func_80178D40(s32 arg0, s32 arg1); +extern void func_80179B28(s32 a0); +extern void func_80179B74(u16 *p); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179DCC(short a0); +extern void func_80179DF8(void); +extern void func_80179E1C(short a0); +extern void func_80179E48(s16 a0); +extern void func_80179E74(s16 a0); +extern void func_80179EA0(u16 *a0); +extern void func_80179EE8(short a0); +extern void func_80179F14(s16 a0, s16 a1); +extern void func_80179F44(void); +extern void func_80179F6C(short a0); +extern void func_80179F98(u16 *a0); +extern void func_80179FEC(u16 *a0); +extern void func_8017A040(u16 *a0); +extern s32 D_801E176C; +extern void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +extern s32 D_801E1794; +extern void func_8017A144(s32 a0); +extern void func_8017A180(void); +extern void func_8017A1A8(void); +extern void func_8017A1D0(void); +extern void func_8017A1F8(void); +extern void func_8017A220(void); +extern void func_8017A248(void); +extern void func_8017A270(void); +extern void func_8017A298(void); +extern void func_8017A2C0(void); +extern void func_8017A2E8(void); +extern void func_8017A310(void); +extern void func_8017A338(void); +extern void func_8017A360(void); +extern void func_8017A388(void); +extern s16 D_801E1750; +extern s32 func_8017A3B0(void); +extern short D_801E178C; +extern short D_801E1788; +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); +extern int func_8017A3D8(void); +extern void func_80172310(u8*); +extern void func_80172780(void*); +extern void func_80172894(void*); +extern void func_801729B0(s32); +extern void func_80172B14(s16); +extern void func_80172C50(u16 *); +extern void func_80172D68(s32); +extern void func_801733FC(s16, u16 *); +extern void func_80173460(s32, s32); +extern void func_801734BC(s32, s32); +extern void func_801736B0(s32, s32); +extern void func_801737B8(s16); +extern void func_801738DC(s16); +extern void func_80173A28(s32, s32, s32, s32, s32, s32); +extern void func_80174438(s32); +extern void func_8017A4AC(void); +extern s32 func_8017AD0C(s32 arg0); +extern s32 func_8017AD0C(s32); +extern s32 func_8017ADE8(s32 a0); +extern s32 func_8017AE08(void); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012AD80(s32 a0); +extern s32 func_8012B030(u8 *a0); +extern s32 func_8012B744(void *a0, void *a1); +extern s32 func_8012BE98(s32 a0, u16 *a1); +extern s16 D_801E2528; +extern s16 D_801E252A; +extern s16 D_801E2534; +extern void func_8017AE2C(s32 param_1); +extern void func_8017B0E4(int param_1, int param_2); +extern s16 D_801E1754; +extern u16 D_801E17D4; +extern u16 D_801E17D6; +extern u16 D_801E17D8; +extern void func_8017B1D8(void); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B490(s32 param); +extern s32 func_8017B614(s32 param_1, s32 param_2); +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern u8 D_8012694C; +extern s16 D_801E17CC; +extern s16 D_801E17CE; +extern s16 D_801E17D0; +extern s16 D_801E17C4; +extern s16 D_801E17C6; +extern s16 D_801E17C8; +extern void func_8017B7A8(void); +extern s16 D_801E17E4; +extern s16 D_801E17E6; +extern s16 D_801E17E8; +extern s16 D_801E17EC; +extern s16 D_801E17EE; +extern s16 D_801E17F0; +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern short D_801E17DC; +extern short D_801E17DE; +extern short D_801E17E0; +extern void func_8017B940(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); +extern SV4 D_801E1774; +extern SV4 D_801E177C; +extern void func_8017BA3C(s32 param_1, s32 param_2); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void (*D_801E179C[10])(int); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8012A4BC(void); +extern void func_8017BCF4(int param_1); +extern void (*D_801E1798)(void); +extern void func_8017BD50(int param_1); +extern void (*D_8018E590[])(void); +extern void func_8017BE60(void *a0); +extern void (*D_8018E630[])(void); +extern void func_8017BE9C(void *a0); +extern void (*D_8018E638[])(void); +extern void func_8017BED8(void *a0); +extern void (*D_8018E640[])(void); +extern void func_8017BF14(void *a0); +extern u8 *func_8012913C(s32 a0); +extern s32 func_8012C750(s32 a0); +extern void func_8017BF50(s32 a0); +extern void func_8017C094(void); +extern void func_8017C100(s32 param_1); +extern void func_8017C1AC(s32 param_1); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012A828(s32, s32); +extern void func_8012B260(u8 *a0); +extern void func_8017C1EC(s32 a0); +extern void func_8017C2B0(s32 a0); +extern void (*D_8018E660[])(void); +extern void func_8017C338(void *a0); +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_8017C374(s32 param_1); +extern void func_8017C538(u8 *p); +extern void (*D_8018E668[])(void); +extern void func_8017C5CC(void *a0); +extern u8 D_8018E654; +extern void func_8017C608(s32 a0); +extern void func_8017C6AC(int a0); +extern void func_8017C710(s32 arg0); +extern void func_8017D990(void *arg0); +extern s32 func_8017D5F0(s32 param_1); +extern s32 func_8017D640(void); +extern void func_800D1E28(void); +extern s32 func_800D1D94(void); +extern void func_8001BFD0(void); +extern s32 func_8017D6D4(s32 a0); +extern void func_800D1EBC(void); +extern void func_8017D784(void); +extern s32 func_8017D7A4(void *a0); +extern void (*D_8018E670[])(void); +extern void func_8017D88C(void *a0); +extern void (*D_8018E678[])(void); +extern void func_8017D8C8(void *a0); +extern void (*D_8018E684[])(void); +extern void func_8017D904(void *a0); +extern void (*D_8018E690[])(void); +extern void func_8017D940(void *a0); +extern s32 D_80127050; +extern void func_8017D97C(void); +extern void (*D_8018E944[])(void); +extern void func_8017D990(void *a0); +extern void func_8017D9CC(u8 *a0); +extern void func_8017D9E0(s32 arg0); +extern void (*D_8018E94C[])(void); +extern void func_8017DA18(void *a0); +extern void func_8017DA54(void *a0); +extern void func_8017DA68(void); +extern void func_8012A094(s32 a0); +extern void func_8017DB4C(void *a0); +extern void func_8017DA88(void); +extern void (*D_8018E954[])(void); +extern void func_8017DBBC(s32 *a0); +extern void func_8017DBC4(void *a0, u8 *a1); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017DD04(s32 param_1); +extern void (*D_8018F01C[])(void); +extern void func_8017E380(void *a0); +extern s32 func_8012E544(s32 arg); +extern void func_8017E510(void); +extern void func_8017E534(void); +extern void func_8017E558(void); +extern void func_8017E57C(void); +extern void func_8017E5A0(void); +extern void func_801843E0(void*, s32); +extern void func_8017E880(void * arg0); +extern void (*D_8018F1C8[])(void); +extern void func_8017E8AC(void *a0); +extern void func_80178CBC(s32*, s32); +extern void func_8017E8E8(void * arg0); +extern void func_80029514(int); +extern void func_8017E914(void); +extern s32 func_801842D4(s32 arg0, s32 arg1); +extern void func_8017E880(void*); +extern void func_8017EA10(s32 *a0); +extern void func_8017EAB4(void * arg0); +extern void func_801843E0(void *a0, s32 a1); +extern void func_8017ECFC(s16 *a0); +extern void (*D_8018F330[])(void); +extern void func_8017ED28(void *a0); +extern void func_8017ED64(void * arg0); +extern void func_8017F09C(void); +extern void (*D_8018F46C[])(void); +extern void func_8017F20C(void *a0); +extern void func_8017F248(void); +extern void func_8017F40C(void * arg0); +extern void func_8017F840(void); +extern void (*D_8018FBE4[])(void); +extern void func_8017F848(void *a0); +extern void func_8017FA34(void); +extern s32 D_801E1A18; +extern void func_8017FA84(void); +extern void func_8017F768(void); +extern void func_8017FB54(void); +extern void func_801851D8(s32 arg); +extern void func_8017FCE4(void); +extern void func_80185238(s32 arg); +extern void func_8017FD04(void); +extern s32 func_8012E57C(s32 arg0, s32 arg1); +extern void func_8017FD24(void); +extern void func_8017FE10(void); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8017FE18(u8 *a0); +extern void func_8017FE3C(void); +extern void func_8017FE78(void); +extern void func_8012E88C(s32 a0); +extern void func_801843B8(s32 a0); +extern void func_8017FFC8(void *a0); +extern void func_80180020(void * arg0); +extern void (*D_8018FC14[])(void); +extern void func_801801F4(void *a0); +extern void func_80180230(void *a0); +extern void func_801804B8(void); +extern void func_80180684(void); +extern void (*D_8018FDFC[])(void); +extern void func_8018068C(void *a0); +extern s32 func_801806C8(void); +extern s32 func_8012C588(s32, s32); +extern void func_801806E0(void); +extern void func_80180704(void); +extern void func_8018072C(void); +extern void (*D_8018FE1C[])(void); +extern void func_80180A24(void *a0); +extern s32 D_8018FE14; +extern void func_80180A60(void * arg0); +extern void (*D_8018FEA4[])(void); +extern void func_80180B40(void *a0); +extern void func_80180B7C(void); +extern void func_80178CBC(s32 *a0, s32 a1); +extern void func_80180B84(short *param_1); +extern void (*D_8018FF38[])(void); +extern void func_80181040(void *a0); +extern void (*D_8019003C[])(void); +extern void func_801812D0(void *a0); +extern void (*D_80190088[])(void); +extern void func_801814A4(void *a0); +extern s32 func_8018107C(void); +extern void func_8018156C(void); +extern s32 func_801817AC(void); +extern void func_80181810(void * arg0); +extern void func_8001C214(s32, s32); +extern void func_80181A1C(void); +extern void func_80181870(void *arg0); +extern void (*D_801901D0[])(void); +extern void func_801819E0(void *a0); +extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2539) */ +extern void func_80172710(void); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2231) */ +extern s32 aF8018CB18(); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern void func_80181A98(void *a0); +extern s32 func_80181B08(void); +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_80181B20(void); +extern s32 func_8012BEE8(s32 a0); +extern void func_80181840(void *a0); +extern void func_80181C78(void *a0); +extern void func_80181CE0(void); +extern void func_80181CE8(void); +extern s32 func_80181CF0(void); +extern void func_80181CF8(void *a0); +extern void (*D_801901EC[])(void); +extern void func_80181D04(void *a0); +extern void func_80181E34(void *a0); +extern void func_80181E7C(void *a0); +extern void (*D_80190200[])(void); +extern void func_80181E88(void *a0); +extern void func_80181FFC(s32 *a0); +extern void (*D_80190214[])(void); +extern void func_80182008(void *a0); +extern void func_80182164(void *a0); +extern void (*D_80190228[])(void); +extern void func_80182170(void *a0); +extern void (*D_80190234[])(void); +extern void func_801822E4(void *a0); +extern void func_80182320(void *a0); +extern void func_8012E32C(void); +extern void func_80182980(void *, s32); +extern s32 RotNclip4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); +extern s32 RotTransPers4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); +extern void *func_80010A08(s32); +extern s32 AddPrim(s32, void *); +extern void func_8012E28C(s32, s32); +extern void func_80182598(u16 *a0, s32 a1); +extern void (*D_8019067C[])(void); +extern void func_801829F8(void *a0); +extern void (*D_801906A8[])(void); +extern void func_80182B50(void *a0); +extern void (*D_801906B0[])(void); +extern void func_80182B8C(void *a0); +extern void (*D_801906C0[])(void); +extern void func_80182BC8(void *a0); +extern void (*D_801906D0[])(void); +extern void func_80182C04(void *a0); +extern void func_80182C40(void); +extern void (*D_801906E0[])(void); +extern void func_80182DF4(void *a0); +extern s32 D_8019037C; +extern void *D_801E1BC8; +extern void func_80182420(s32 arg0, s32 arg1); +extern void func_80182F8C(void); +extern void func_80182FC0(void); +extern s32 D_801903EC; +extern void func_80182FF4(void); +extern void func_80183028(void); +extern void func_8018305C(void); +extern void func_80183104(void); +extern s32 func_80183138(void); +extern void func_80183184(void); +extern void func_801831B8(void); +extern void func_801831EC(void); +extern s32 func_80183220(void); +extern void func_8018326C(void); +extern s32 func_801832A0(void); +extern void func_8012B414(int a0); +extern void func_8018360C(s32 arg0); +extern void (*D_80190700[])(void); +extern void func_8018381C(void *a0); +extern u32 D_801906F0; +extern void func_80183858(s32 arg0); +extern void func_801838D4(void); +extern void (*D_80190738[])(void); +extern void func_801838DC(void *a0); +extern void func_80183C34(void *arg0); +extern s32 func_8012AD50(void *arg0); +extern void func_80183918(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_80183BE4(void); +extern void func_80183CF0(void *arg0); +extern void aF801839A8(); +extern void func_80017714(void *); +extern u32 D_801E1C60; +extern u16 D_80190740[]; +extern u16 D_801E1C64[]; +extern s32 D_80190760; +extern void func_80183E38(void); +extern void func_80183EC4(void *a0); +extern void func_80183ED4(void *a0); +extern s32 func_80183EE4(void *a0, void *a1); +extern void func_8012A828(s32 arg0, s32 arg1); +extern void func_80183F80(void *a0); +extern void func_80183FAC(void *a0); +extern void func_80183FD8(void *a0); +extern s32 func_8018422C(s32 arg0); +extern s32 func_80184088(s32 a0); +extern s32 func_80184088(s32 arg); +extern void func_801841EC(void *a0); +extern void func_801841B8(void *a0); +extern short D_800BA2BA; +extern void (*D_801BBE68[])(void); +extern void func_80184254(void *a0); +extern void func_80184290(void); +extern void func_80184298(void *a0, s32 a1, s32 a2); +extern s32 func_801842F8(u8 a0, u8 a1, u8 a2, u8 a3); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_80184350(void *a0, s32 a1); +extern void func_801843D8(void *a0); +extern void func_8012E8A8(u8 *a0); +extern void aF801843E0(); +extern s32 func_80184428(void); +extern s32 func_80184484(void); +extern s32 func_801844F8(void); +extern s32 func_8018456C(void); +extern void func_801845C8(void); +extern void func_8012B200(u8 *a0); +extern void func_801845FC(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_801846CC(s32 a0); +extern s32 func_80184894(s32 a0); +extern void (*D_801BBE88[])(void); +extern void func_801848DC(void *a0); +extern void func_80184918(void); +extern void func_80184920(void); +extern void func_80184928(void); +extern void func_80184930(void); +extern void func_80184938(void); +extern void func_80184940(void *a0); +extern void func_80184984(void); +extern void func_8001D0E8(s32 arg0, s32 arg1, s32 arg2); +extern void func_8018498C(s32 a0); +extern void func_801850A0(s32 a0); +extern void func_8018502C(s32 a0); +extern void func_80185100(s32 a0); +extern void func_80184FC4(s32 a0); +extern void func_80184A14(s32 a0); +extern void func_8001C97C(s32 a0); +extern void *func_80185394(void *a0); +extern void func_80184BEC(s32 a0); +extern void func_80185498(void *a0); +extern void func_80184D8C(void *a0); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_80185614(void); +extern void func_80184E08(s32 a0); +extern void func_80184ED4(void); +extern void func_80184EF4(s32 a0); +extern void func_80185180(s32 a0, s32 a1); +extern void func_80185754(s32 a0, s32 a1); +extern void func_801851D8(s32 a0); +extern void func_80185238(s32 a0); +extern void func_80185280(s32 a0); +extern void func_801852D0(s32 a0); +extern s32 func_80185308(s32 a0); +extern s32 func_80185438(void *a0); +extern s32 func_801859D0(void *a0); +extern void * func_80185394(void *a0); +extern void func_80185648(void *a0); +extern void aF80185EEC(); +extern void func_8018567C(void *a0, s32 a1, s32 a2); +extern void func_801856E0(s32 a0, s32 a1, s32 a2); +extern void (*D_801BC184[])(void); +extern void func_801857AC(void *a0); +extern void func_801857E8(void *a0); +extern s32 func_8012BD14(s32 a0); +extern void func_80185864(void *a0); +extern s32 func_80185ADC(s32 a0); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012CB64(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8012F214(s32 arg0, s32 arg1, s32 arg2); +extern void func_80185B38(void); +extern s16 func_80185B78(void); +extern void func_80029444(void); +extern void func_801754A8(void); +extern void func_80141C04(void); +extern void func_80185BD4(void); +extern u8 D_80115138[]; +extern u8 D_80115148[]; +extern s16 D_801E23F0; +extern s16 D_801E23F4; +extern s16 D_801E23F8; +extern s16 D_801E23FC; +extern s16 D_801E2400; +extern s16 D_801E2404; +extern s32 D_801E23D0; +extern s16 D_801E1C88; +extern s32 D_801E73C0; +extern s32 D_801E40F0; +extern s32 D_801E474C; +extern u8 D_801BCBEC[]; +extern s32 D_801BCBB4[]; +extern s32 resLoad_lastId; +extern s32 func_800149E0(s32 a0); +extern void func_80137B80(void); +extern s32 func_801376E8(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_80139A68(s32 a0, u16 a1); +extern s16 func_8014168C(s16 a0); +extern void func_80187EA0(void); +extern s32 func_80188C68(s32 a0, s16 a1); +extern s16 func_8018957C(s32 a0); +extern void func_80187010(void); +extern void func_801E4BA4(s32 a0); +extern void func_801895C8(void); +extern void func_80187814(void); +extern s32 func_80187B50(void); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern s32 *func_8018893C(s32 *, void *, s32, void *, s32); +extern s32 func_801882AC(void *, s32, s32, s32, s32 *); +extern s32 * func_801880E0(s32 *ot, Panel_8017E978_801880E0 *w0, s16 idx); +/* ==== end §8b carried decl layer ==== */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_80188544; + +/* func_80188544 — ov_SC04_018 / ov_SC04_018_jr_801878E8, 254 ins, jtbl_801E599C (8 entries, + * minval 7 -> `addiu $a0,$a0,-7` + HImode re-extension, so the switch index type is short). + * + * Modelled on the ALREADY-MATCHED structural twin in the same overlay, + * src/ov_SC04_018/ov_SC04_018_jr_8013FFD8.c:1065 `func_8014032C` — same family: + * `result = D_801117EC;` default, `switch ((short)param_1)`, `((short)param_2)` at every use, + * `func_800291B4(D_8018BC64[...]) & 0xFF` -> `result = D_8018BD24[uVar3];`. + * Case bodies are emitted in SOURCE order, so the source order here is 10,7,8,13,14,11,default + * (read off the block order after the jr: 80188E70, 80188EB8, 80188F28, 80189004, 80189044, + * 80189108, 801891E0). + * + * Cases 9 and 12 are ABSENT from the source: their jtbl slots (indices 2 and 5) point at the + * default label 0x801891E0, which is also the out-of-range target of `beqz $v0,.L801891E0`. + * + * Three register/shape constraints read off the target: + * (a) each `& 0xFF` temp is BLOCK-SCOPED. A single function-scope temp gives one pseudo whose + * live range crosses the calls in cases 13/14, so gcc pins it to $s0; the target keeps it in + * $v1 / $v0 (dead before the call) and uses $s0 only for the value that IS live across a call. + * (b) case 14 uses u8 (QImode) locals. `lbu` into an s32 local is provably <=0xFF, so gcc folds + * `(v & 0xFF)` away; the target emits `andi $v1,$a0,0xFF` for the compare and + * `andi $s3,$a0,0xFF` for `n + 0x62`, which is the QImode-pseudo widening pattern. + * Case 13 has NO such andi, so there the local is s32 — the two cases are deliberately + * asymmetric (cookbook §160d). Case 14 also REUSES that one variable for `v + 1` + * (`v = v + 1`, not `u8 n = v + 1`): two pseudos gave `addiu $v0,$a0,1; andi $s3,$v0`, + * one pseudo gives the target's in-place `addiu $a0,$a0,1; andi $s3,$a0`. That was the + * last 2-instruction residual. + * (c) in case 11 the arms whose `lui/addiu $s1,%hi/%lo(sym)` sits BEFORE the branch (filling the + * `lw` load-delay slot) are assign-then-conditionally-override, not if/else: the address + * materialisation has to be in the SAME basic block as the load for the post-reload scheduler + * to hoist it. The arm at .L801891B4 keeps its `nop`, so that one is a plain `if`. + */ + + +s32 func_80188544(s32 param_1, s32 param_2) { + extern void *func_80189504(s32 a0); + extern s16 D_80115126; + extern u8 D_801117EC[]; + extern u8 * D_801E234C; + extern u8 * D_801E2354; + extern u8 D_801E2410[]; + extern u8 D_8018BC64[]; + extern void * D_8018BD24[]; + extern void * D_801DE844[]; + extern void * D_801BCB1C[]; + extern void * D_801BCB38[]; + extern s32 * D_801E23CC[]; + extern s16 D_8010EDEE; + extern u8 D_8010EDF2; + extern s16 D_800A6586[]; + extern u8 D_801E3784[]; + extern u8 D_801E3F58[]; + extern u8 D_801E7540[]; + extern u8 D_801E756C[]; + extern u8 D_801E7584[]; + extern u8 D_801E75B0[]; + + /* [T51] scoped in: these must not constrain the rest of the TU (cookbook §103). */ + + void *result; + + result = D_801117EC; + switch ((short)param_1) { + case 10: + if (D_80115126 != 5) { + result = D_8018BD24[D_801E234C[(short)param_2]]; + } else { + result = D_801BCB1C[(short)param_2]; + } + break; + + case 7: { + s32 t = func_800291B4(D_8018BC64[(short)param_2]) & 0xFF; + if (t != 0) { + s32 idx = t * 0xC; + if (*(s16 *)((u8 *)&D_8010EDEE + idx) != 0 && + D_80115126 == *((u8 *)&D_8010EDF2 + idx)) { + result = func_80189504(((short)param_2 & 3) + 6); + func_80139A68(*(s16 *)((u8 *)&D_8010EDEE + idx), 0); + } else { + result = func_80189504(5); + } + } + break; + } + + case 8: + if (D_80115148[0] != 0) { + s32 t = func_800291B4(D_8018BC64[(short)param_2]) & 0xFF; + if (t != 0) { + s32 idx = t * 0xC; + if (*(s16 *)((u8 *)&D_8010EDEE + idx) != 0 && + D_80115126 == *((u8 *)&D_8010EDF2 + idx)) { + result = func_80189504(((short)param_2 & 3) + 6); + func_80139A68(*(s16 *)((u8 *)&D_8010EDEE + idx), 0); + } else { + result = func_80189504(5); + } + } + } else { + s32 t = func_800291B4(D_8018BC64[(short)param_2]) & 0xFF; + if (t != 0) { + result = D_8018BD24[t]; + } + } + break; + + case 13: { + s32 e = D_801E2354[(short)param_2]; + if ((func_800291B4(e + 0x62) & 0x80) != 0) { + result = D_801DE844[e]; + } + break; + } + + case 14: { + u8 v = D_801E2410[(short)param_2]; + if (v != 0xFF) { + s32 code; + v = v + 1; + code = v + 0x62; + if ((func_800291B4(code) & 0xF0) == 0xC0) { + result = func_80189504(((short)param_2 & 1) | 6); + func_80139A68((s16)(D_800A6586[v] * 9 / 10), 0); + } else if ((func_800291B4(code) & 0xF0) == 0xE0) { + result = D_801E3784; + } + } + break; + } + + case 11: + if (D_80115126 == 4) { + if (D_80115148[0] == 0) { + result = D_801E7540; + if (D_801E23CC[(short)param_2] == 0) { + result = D_801BCB38[(short)param_2]; + } + } else { + s32 *p = D_801E23CC[(short)param_2]; + if (p != 0) { + result = D_801E75B0; + if (p[1] != 0) { + result = D_801E7584; + } + } else { + result = D_801E756C; + } + } + } else { + if (D_801E23CC[(short)param_2] != 0) { + result = D_801E3F58; + } + } + break; + + default: + result = func_80189504(0); + break; + } + return (s32)result; +} + +/* func_8018893C — twin of the byte-matched func_8018BCD4 in ov_SC03_001/ov_SC03_001_jr_8017AE2C.c + * (family of 4: this fn + ov_SC04_018/func_80189214 + ov_SC04_019/func_80189214 + + * ov_SC05_017/func_80188F14; all normalize byte-identical to this shape). Only the two + * overlay-local data symbols differ (D_801BC522/D_801BC536 here vs D_801C11BA/D_801C11CE + * there). Caller in this TU (func_801880E0) already declares the matching prototype: + * extern s32 *func_8018893C(s32 *, void *, s32, void *, s32); + */ + +extern s32 *func_8018893C(s32 *, void *, s32, void *, s32); + +s32 *func_8018893C(out, src, idx, w, col) + s32 *out; + void *src; + s16 idx; + void *w; + s32 col; +{ + extern short D_800B9A02; /* TU-visible spelling (file scope) */ + extern s16 func_8014168C(s16 a0); + extern u16 D_8011511A; + extern u16 D_80115116; + extern u8 D_80115138[]; + extern u8 D_80115140[]; + extern u8 D_80115148[]; + extern u8 D_80115158[]; + extern u16 D_801BC522; + extern u16 D_801BC536; + + extern Env_8018893C D_800AE7BC[]; + + + /* §37 /s-DEP LATTICE: this store MUST be MEM_IN_STRUCT_P. `out[0] = k` folds `out + 0` + * away and expands as a NON-/s mem, which keeps the true_dependence edge to the incoming + * 5th-arg slot and pins `lw $v1,0x38($sp)` after it. The target has the arg load AFTER + * the out[0] store, i.e. the edge must be DROPPED — sched.c's drop clause needs the store + * /s + varying and the load non-/s + fixed-address. A COMPONENT_REF at offset 0 supplies + * the /s. */ + + s32 c; + s16 t; + u16 *q; + s32 m; + volatile u16 *pbh; + + c = D_80115138[idx]; + + ((W_8018893C *)out)->w = 0x04000000; + *((u8 *)out + 0xC) = 0x30; + *((u8 *)out + 0xD) = 0x48; + *(s16 *)((u8 *)out + 0xE) = 0x4056; + out[1] = col | 0x64000000; + + if (c < 10) { + /* §135 idiom 9/T3: the fleet decl returns s16; cast at the CALL so the return feeds + * `sll $v0,$v0,1` with no `andi`/re-extend. */ + t = ((s32 (*)(s16)) func_8014168C)(idx) * 2; + } else { + t = (D_80115148[idx * 2] - D_80115140[idx]) * 2; + } + + q = (u16 *)(t * 2 + (s32)src); + pbh = (volatile u16 *)&D_800B9A02; + *(s16 *)((u8 *)out + 0x8) = q[0] - 8; + *(s16 *)((u8 *)out + 0xA) = q[1]; + *(s16 *)((u8 *)out + 0x12) = 8; + *(s16 *)((u8 *)out + 0x10) = 8; + + /* §36 BITFIELD STORE = THE MASK-ORDER DECOUPLER. The head materializes 0x00FFFFFF + * (lui+ori) BEFORE 0xFF000000 (lui) while the body ANDs the dest first. `volatile` on the + * index read is what keeps the SECOND *pbh load alive (a plain read cse-folds and the + * fn loses 5 ins). */ + ((PTag_8018893C *)out)->addr = + ((PTag_8018893C *)(D_800AE7BC[*pbh].ot + 2))->addr; + ((PTag_8018893C *)(D_800AE7BC[*pbh].ot + 2))->addr = (u32)out; + + out += 5; + if (c < 10) { + return out; + } + + m = D_8011511A; + if (m == idx) { + if ((D_80115116 & 8) != 0) { + s16 j; + s32 k; + s16 y; + s16 eight; + u16 *pb; + /* §137/§36: m24 is a 2-insn constant, but the natural allocno order puts j/k ahead + * of it and rotates $a2/$a3/$t0. Pinning m24 alone restores the whole rotation. */ + register u32 m24 __asm__("$6"); + u32 mhi; + s32 vsum; + + j = 0; + k = m; + eight = 8; + pb = (u16 *)&D_800B9A02; + m24 = 0xFFFFFF; + mhi = 0xFF000000; + /* NOTE: the loop deliberately has NO source pointer of its own. gcc's combine_givs + * folds every `out + K` reference into ONE address giv based at out+0x12; adding a + * `u8 *p = (u8*)out + 0x12` biv makes `*(s16*)p` use the biv directly, which + * survives as a SECOND register (the +1-instruction LENGTH-DRIFT). The giv's base + * is the LAST such reference in source order — hence the +8 (`vsum`) store sits + * before the 0x10/0x12 stores here even though the scheduler sinks it back. */ + for (; j < 2; j++) { + if (j == 0) { + if (D_80115140[k] == 0) { + continue; + } + *((u8 *)out + 0xD) = 0x30; + y = D_801BC522 - 2; + } else { + s32 k2 = k * 2; + if ((((s8 *)D_80115158)[k2] - ((s8 *)D_80115140)[k]) < 7) { + continue; + } + *((u8 *)out + 0xD) = 0x38; + y = D_801BC536 + 1; + } + *(s16 *)((u8 *)out + 0xA) = y; + __asm__("" ::: "memory"); /* keeps the y store ahead of the 0x64808080 pair */ + *(u32 *)out = 0x04000000; + *((u8 *)out + 0xC) = 0x78; + *(u32 *)((u8 *)out + 0x4) = 0x64808080; + *(s16 *)((u8 *)out + 0xE) = 0x4056; + vsum = *(s32 *)((u8 *)w + 8) + *(s32 *)((u8 *)w + 0xC) - 0xC; + *(s16 *)((u8 *)out + 0x8) = vsum; + *(s16 *)((u8 *)out + 0x10) = eight; + *(s16 *)((u8 *)out + 0x12) = eight; + *(u32 *)out = ((*(u32 *)out) & mhi) | (D_800AE7BC[*pb].ot[2] & m24); + { + register u32 *op __asm__("$4"); + op = D_800AE7BC[*pb].ot; + op[2] = (op[2] & mhi) | (((u32)out) & m24); + } + out += 5; + } + } + } + return out; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80188C68); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80189504); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018953C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018957C); + + +/* func_801895C8 — ov_SC03_001 (133 ins), exemplar of a 5-member open-only + * h_norm cluster. Builds the full-screen fade overlay: a DR_MODE-style 8-byte + * GP0 packet (0xE1000015), a 320x240 semi-transparent gouraud quad (POLY_G4, + * code 0x3A), and a second 8-byte GP0 packet (0xE1000240), each linked into the + * current OT with the psyq `addPrim` idiom. The type shapes and the + * `((PTag *)x)->addr = ((PTag *)ot)->addr; ((PTag *)ot)->addr = (u32)x;` pair + * are copied VERBATIM from the already-matched neighbour func_8018BCD4 in this + * same TU (§71) — Env_* / PTag_* there are the fleet-canonical shapes. + * + * Levers that were load-bearing (all byte-tested; the draft is PIN-FREE): + * §20 &D_801151D0 / &D_800B9A02 taken into pointer LOCALS -> each address is + * force_reg'd once (lui+addiu -> $t2 / $a3) instead of a %lo per use. + * §36 the 24-bit BITFIELD store, not a hand-written mask, is what emits + * 0x00FFFFFF (lui+ori) ahead of 0xFF000000 (lui) while the body ANDs the + * destination first — expmed's store_fixed_bit_field signature. + * §37 asm-label aliases for D_801E2364/D_801E2368: the TU canon is u16/s16 + * but the target does a bare `lbu %lo(sym)`, and a plain block-scope + * `extern u8` would be a conflicting redeclaration. + * --- `volatile` on the OT index read keeps all SIX *pbh loads alive; a plain + * read cse-folds them and the function loses ~25 instructions. + * S1 the whole body is ONE branch-free basic block and every store ties at + * the same priority, so forward asm order == source statement order — + * the POLY_G4 block below is a literal transcription of the target. + * S2 `p` is destructively updated (multi-set -> no birthing boost) so its + * `addiu +8` floats up into the preceding load-delay gap, while `r` is a + * FRESH single-set local (boosted) so its `addiu +0x24` sinks to sit + * immediately before `sb 3($a0)`. Both placements are the target's. + * --- the bare `p = r;` before r's uses is a COMBINE BARRIER: without a SET + * of `p` between `r = p + 9` and r's first use, `can_combine_p` lets + * combine substitute `r` -> `p + 0x24` into every MEM offset and the + * `addiu` disappears entirely (and, at the tail, `p += 2` folds to + * `addiu $t3,$t3,0x2C` off the stale base instead of `addiu $t3,$a0,8`). + * It also fixes the register rotation for free — verified that adding or + * removing `register __asm__` pins on p/r/pbh is a byte no-op. + */ + +/* ---- TU-visible spellings (file scope of ov_SC03_001_jr_8018A3A8.c) ---- */ + +void func_801895C8(void) { + + extern s32 D_801151D0; + extern u16 D_801E2364; + extern s16 D_801E2368; + /* §100/§120: draft-local, uniquely-named types — they live in the BODY so + * they cannot collide with the TU's own Env_8018BCD4 / PTag_8018BCD4. */ + typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018C960_801895C8; + typedef struct { u32 *ot; u32 pad[4]; } Env_8018C960_801895C8; /* 0x14 stride */ + typedef struct { + u32 tag; /* 0x00 */ + u8 r0, g0, b0, code; /* 0x04..0x07 */ + s16 x0, y0; /* 0x08, 0x0A */ + u8 r1, g1, b1, p1; /* 0x0C..0x0F */ + s16 x1, y1; /* 0x10, 0x12 */ + u8 r2, g2, b2, p2; /* 0x14..0x17 */ + s16 x2, y2; /* 0x18, 0x1A */ + u8 r3, g3, b3, p3; /* 0x1C..0x1F */ + s16 x3, y3; /* 0x20, 0x22 */ + } PG4_8018C960_801895C8; /* -> 0x24 */ + + extern Env_8018C960_801895C8 D_800AE7BC[]; + extern u8 aD801EF1EC __asm__("D_801E2364"); + extern u8 aD801EF1F0 __asm__("D_801E2368"); + + u32 **pp; + volatile u16 *pbh; + u32 *p; + u32 *r; + u8 c1, c2; + + pp = (u32 **)&D_801151D0; + pbh = (volatile u16 *)&D_800B9A02; + + p = *pp; + ((PTag_8018C960_801895C8 *)p)->len = 1; + p[1] = 0xE1000015; + ((PTag_8018C960_801895C8 *)p)->addr = ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; + + p += 2; + ((PG4_8018C960_801895C8 *)p)->tag = 0x08000000; + ((PG4_8018C960_801895C8 *)p)->code = 0x3A; + ((PG4_8018C960_801895C8 *)p)->x2 = -160; + ((PG4_8018C960_801895C8 *)p)->x0 = -160; + ((PG4_8018C960_801895C8 *)p)->x3 = 160; + ((PG4_8018C960_801895C8 *)p)->x1 = 160; + c1 = aD801EF1EC; + ((PG4_8018C960_801895C8 *)p)->b1 = c1; + ((PG4_8018C960_801895C8 *)p)->b0 = c1; + ((PG4_8018C960_801895C8 *)p)->g1 = c1; + ((PG4_8018C960_801895C8 *)p)->g0 = c1; + ((PG4_8018C960_801895C8 *)p)->r1 = c1; + ((PG4_8018C960_801895C8 *)p)->r0 = c1; + c2 = aD801EF1F0; + ((PG4_8018C960_801895C8 *)p)->y1 = -120; + ((PG4_8018C960_801895C8 *)p)->b3 = c2; + ((PG4_8018C960_801895C8 *)p)->b2 = c2; + ((PG4_8018C960_801895C8 *)p)->g3 = c2; + ((PG4_8018C960_801895C8 *)p)->g2 = c2; + ((PG4_8018C960_801895C8 *)p)->r3 = c2; + ((PG4_8018C960_801895C8 *)p)->r2 = c2; + ((PG4_8018C960_801895C8 *)p)->y0 = -120; + ((PG4_8018C960_801895C8 *)p)->y3 = 120; + ((PG4_8018C960_801895C8 *)p)->y2 = 120; + + ((PTag_8018C960_801895C8 *)p)->addr = ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; + + r = p + 9; /* 0x24 */ + p = r; /* COMBINE BARRIER — see header */ + ((PTag_8018C960_801895C8 *)r)->len = 1; + r[1] = 0xE1000240; + ((PTag_8018C960_801895C8 *)r)->addr = ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_801895C8 *)D_800AE7BC[*pbh].ot)->addr = (u32)r; + + p += 2; + *pp = p; +} + + + +extern void (*D_801D52BC[])(void); + +void func_801897DC(void *a0) { + D_801D52BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801D529C[]; + +void func_80189818(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801D529C[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801D529C)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801D529C[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801D52D0[])(void); + +void func_801898DC(void *a0) { + D_801D52D0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_80189818(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_80189918(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_80189818(param_1, -0x80); + func_80189818(param_1, -0x30); + func_80189818(param_1, 0x20); + func_80189818(param_1, 0x70); + func_80189818(param_1, 0xc0); + } + if (1 < uVar1) { + func_80189818(param_1, -0x58); + func_80189818(param_1, -0x8); + func_80189818(param_1, 0x48); + func_80189818(param_1, 0x98); + func_80189818(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_80189818(s32, s32); + +void func_80189A00(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_80189818(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801D52C4; + +void func_80189A40(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801D52C4, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_80189AC8(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80189B10); + + +extern void (*D_801DE38C[])(void); + +void func_80189BBC(void *a0) { + D_801DE38C[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +/* Declarations conformed to the TU (ov_SC04_018_jr_8017AE2C.c) — lever (A): + * func_8012A828 : TU declares `extern void ((void (*)(s32*, s32))func_8012A828)(s32*, s32);` + * at L3460 / L4615 / L5083 / L5372 / L5859 / L6004 / L6155 / + * L6479 / L6504 / L6529. The draft's `(s32, s32)` form caused + * the 7697-vs-6529 conflict. Conformed here; the type + * disagreement is pushed to a cast at the call site. + * D_8018AEDC : TU declares `extern u8 D_8018AEDC[];` (block scope, L3467). + * Conformed; `(s32)D_8018AEDC` == `(s32)&D_8018AEDC`. + * func_801788B8 : verbatim from TU L2532 / L7756 (below the splice point). + * func_8012C354, D_801DE278, func_80189CF0, func_80189BF8 : no other + * declaration anywhere in the TU (func_80189CF0 / func_80189BF8 + * appear only as INCLUDE_ASM, which emits no C declaration). + * + * Body: the original draft was NOT byte-correct. `*(u16 *)(x + 2) = 1;` must be + * sequenced BEFORE the func_8012A828 call, not after it — with it after, gcc + * coalesces the store base onto $a0 (`sh v0,2(a0)`) and re-emits the arg copy, + * giving a 6-instruction ADDRESSING/cse diff. Moved above the call; both stores + * now retire off $s0 and the sh lands in the jal delay slot, as in the target. */ + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8012A828(s32, s32); +extern s32 func_801788B8(s32 arg0, s32 arg1); + +extern void func_80189CF0(void); + +void func_80189BF8(s32 a0) { + + extern M2C_UNK D_801DE278; + extern u8 D_8018AEDC[]; + s32 s0 = a0; + if (func_8012C354(a0, (s32)&D_801DE278)) { + *(u8 *)(s0 + 0xC0) = 1; + *(u16 *)(s0 + 0x2) = 1; + ((void (*)(s32*, s32))func_8012A828)((s32 *)s0, (s32)D_8018AEDC); + func_801788B8(s0, (s32)func_80189CF0); + } +} + + +void func_80189C5C(void) { +} + + +extern void func_80178CBC(s32 *a0, s32 a1); + +void func_80189C64(s32 *a0) +{ + + extern signed char D_801DE368[]; + s32 v0; + + v0 = *(s16 *)((s32)a0 + 0x70); + v0 = v0 * 4; + func_80178CBC(a0, *(s32 *)((s32)D_801DE368 + v0)); + *(s16 *)((s32)a0 + 0x2) = 0x3; +} + + + +extern int func_80178970(void); +extern void func_80178D18(void); + +void func_80189CB0(s32 a0) { + if (func_80178970() != 0) { + ((void (*)(s32))func_80178D18)(a0); + *(s16 *)(a0 + 2) = 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80189CF0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80189D4C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80189F00); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A250); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A3C8); + + +extern void func_8012E8E0(s32 a0, s32 a1); + +void func_8018A470(s32 arg0) +{ + + extern s32 D_801DE4EC; + s32 v1; + + *(short *)(arg0 + 0x2) = 3; + *(short *)(arg0 + 0x34) = 0; + func_8012E8E0(arg0, (s32)&D_801DE4EC); + v1 = *(s32 *)(arg0 + 0x68); + *(short *)(v1 + 0xC) = 0x7FFF; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A4B8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A594); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A5B8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A61C); + + + + + + + + + + + + + + + + + +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +void func_8018A698(void) +{ + int new_var; + ((void (*)(s32, s32)) func_80131E00)(new_var, 3); + new_var = 0x80C70000; +} + +void func_8018A6B8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A6C0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A788); + + + + + + diff --git a/src/ov_SC04_019/ov_SC04_019_jr_801878E8.c b/src/ov_SC04_019/ov_SC04_019_jr_801878E8.c index 50d940bfb7..409302fa5c 100644 --- a/src/ov_SC04_019/ov_SC04_019_jr_801878E8.c +++ b/src/ov_SC04_019/ov_SC04_019_jr_801878E8.c @@ -3647,1224 +3647,3 @@ s32 *func_801889B8(s32 *ot, Panel_8017E978_801889B8 *w0, s16 idx) { INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_80188B84); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_80188E1C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_80189214); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_80189540); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_80189DDC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_80189E14); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_80189E54); - - -/* func_80189EA0 — ov_SC03_001 (133 ins), exemplar of a 5-member open-only - * h_norm cluster. Builds the full-screen fade overlay: a DR_MODE-style 8-byte - * GP0 packet (0xE1000015), a 320x240 semi-transparent gouraud quad (POLY_G4, - * code 0x3A), and a second 8-byte GP0 packet (0xE1000240), each linked into the - * current OT with the psyq `addPrim` idiom. The type shapes and the - * `((PTag *)x)->addr = ((PTag *)ot)->addr; ((PTag *)ot)->addr = (u32)x;` pair - * are copied VERBATIM from the already-matched neighbour func_8018BCD4 in this - * same TU (§71) — Env_* / PTag_* there are the fleet-canonical shapes. - * - * Levers that were load-bearing (all byte-tested; the draft is PIN-FREE): - * §20 &D_801151D0 / &D_800B9A02 taken into pointer LOCALS -> each address is - * force_reg'd once (lui+addiu -> $t2 / $a3) instead of a %lo per use. - * §36 the 24-bit BITFIELD store, not a hand-written mask, is what emits - * 0x00FFFFFF (lui+ori) ahead of 0xFF000000 (lui) while the body ANDs the - * destination first — expmed's store_fixed_bit_field signature. - * §37 asm-label aliases for D_801E770C/D_801E7710: the TU canon is u16/s16 - * but the target does a bare `lbu %lo(sym)`, and a plain block-scope - * `extern u8` would be a conflicting redeclaration. - * --- `volatile` on the OT index read keeps all SIX *pbh loads alive; a plain - * read cse-folds them and the function loses ~25 instructions. - * S1 the whole body is ONE branch-free basic block and every store ties at - * the same priority, so forward asm order == source statement order — - * the POLY_G4 block below is a literal transcription of the target. - * S2 `p` is destructively updated (multi-set -> no birthing boost) so its - * `addiu +8` floats up into the preceding load-delay gap, while `r` is a - * FRESH single-set local (boosted) so its `addiu +0x24` sinks to sit - * immediately before `sb 3($a0)`. Both placements are the target's. - * --- the bare `p = r;` before r's uses is a COMBINE BARRIER: without a SET - * of `p` between `r = p + 9` and r's first use, `can_combine_p` lets - * combine substitute `r` -> `p + 0x24` into every MEM offset and the - * `addiu` disappears entirely (and, at the tail, `p += 2` folds to - * `addiu $t3,$t3,0x2C` off the stale base instead of `addiu $t3,$a0,8`). - * It also fixes the register rotation for free — verified that adding or - * removing `register __asm__` pins on p/r/pbh is a byte no-op. - */ - -/* ---- TU-visible spellings (file scope of ov_SC03_001_jr_8018A3A8.c) ---- */ - -void func_80189EA0(void) { - - extern s32 D_801151D0; - extern u16 D_801E770C; - extern s16 D_801E7710; - /* §100/§120: draft-local, uniquely-named types — they live in the BODY so - * they cannot collide with the TU's own Env_8018BCD4 / PTag_8018BCD4. */ - typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018C960_80189EA0; - typedef struct { u32 *ot; u32 pad[4]; } Env_8018C960_80189EA0; /* 0x14 stride */ - typedef struct { - u32 tag; /* 0x00 */ - u8 r0, g0, b0, code; /* 0x04..0x07 */ - s16 x0, y0; /* 0x08, 0x0A */ - u8 r1, g1, b1, p1; /* 0x0C..0x0F */ - s16 x1, y1; /* 0x10, 0x12 */ - u8 r2, g2, b2, p2; /* 0x14..0x17 */ - s16 x2, y2; /* 0x18, 0x1A */ - u8 r3, g3, b3, p3; /* 0x1C..0x1F */ - s16 x3, y3; /* 0x20, 0x22 */ - } PG4_8018C960_80189EA0; /* -> 0x24 */ - - extern Env_8018C960_80189EA0 D_800AE7BC[]; - extern u8 aD801EF1EC __asm__("D_801E770C"); - extern u8 aD801EF1F0 __asm__("D_801E7710"); - - u32 **pp; - volatile u16 *pbh; - u32 *p; - u32 *r; - u8 c1, c2; - - pp = (u32 **)&D_801151D0; - pbh = (volatile u16 *)&D_800B9A02; - - p = *pp; - ((PTag_8018C960_80189EA0 *)p)->len = 1; - p[1] = 0xE1000015; - ((PTag_8018C960_80189EA0 *)p)->addr = ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; - - p += 2; - ((PG4_8018C960_80189EA0 *)p)->tag = 0x08000000; - ((PG4_8018C960_80189EA0 *)p)->code = 0x3A; - ((PG4_8018C960_80189EA0 *)p)->x2 = -160; - ((PG4_8018C960_80189EA0 *)p)->x0 = -160; - ((PG4_8018C960_80189EA0 *)p)->x3 = 160; - ((PG4_8018C960_80189EA0 *)p)->x1 = 160; - c1 = aD801EF1EC; - ((PG4_8018C960_80189EA0 *)p)->b1 = c1; - ((PG4_8018C960_80189EA0 *)p)->b0 = c1; - ((PG4_8018C960_80189EA0 *)p)->g1 = c1; - ((PG4_8018C960_80189EA0 *)p)->g0 = c1; - ((PG4_8018C960_80189EA0 *)p)->r1 = c1; - ((PG4_8018C960_80189EA0 *)p)->r0 = c1; - c2 = aD801EF1F0; - ((PG4_8018C960_80189EA0 *)p)->y1 = -120; - ((PG4_8018C960_80189EA0 *)p)->b3 = c2; - ((PG4_8018C960_80189EA0 *)p)->b2 = c2; - ((PG4_8018C960_80189EA0 *)p)->g3 = c2; - ((PG4_8018C960_80189EA0 *)p)->g2 = c2; - ((PG4_8018C960_80189EA0 *)p)->r3 = c2; - ((PG4_8018C960_80189EA0 *)p)->r2 = c2; - ((PG4_8018C960_80189EA0 *)p)->y0 = -120; - ((PG4_8018C960_80189EA0 *)p)->y3 = 120; - ((PG4_8018C960_80189EA0 *)p)->y2 = 120; - - ((PTag_8018C960_80189EA0 *)p)->addr = ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; - - r = p + 9; /* 0x24 */ - p = r; /* COMBINE BARRIER — see header */ - ((PTag_8018C960_80189EA0 *)r)->len = 1; - r[1] = 0xE1000240; - ((PTag_8018C960_80189EA0 *)r)->addr = ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)r; - - p += 2; - *pp = p; -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018A0B4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018A168); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018A1D0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018A224); - - -/* func_8018A2E0 (ov_SC04_018, ov_SC04_018_jr_8017AE2C) — MATCH (250 ins) - * - * Shadow/marker quad renderer: builds an outer quad (D_801E00B0 offset table) - * through RotNclip4, rejects it on OTZ, builds the inner quad (D_801E0130) - * through RotTransPers4, then emits 4 semi-transparent POLY_G4 (0x24 each) + - * one semi-transparent POLY_F4 (0x18) out of one 0xA8 packet allocation. - * - * Levers that closed the residual (all byte-verified against the .s): - * - frame 0xE0 with locals starting at 0x30: STARTING_FRAME_OFFSET == - * outgoing-args size (RotNclip4 takes 11 args -> 0x2C -> 0x30). `pad0[16]` - * is the DEAD 0x20-byte first local (§136 idiom 6) that puts va at sp+0x50. - * - `sxy[8]` is ONE array: RotNclip4 fills [0..3], RotTransPers4 fills [4..7], - * and the loop indexes the whole thing (idx values run 0..7). - * - `register u16 *dst __asm__("$4")`: a HARD-reg dst is not a biv, so loop.c - * cannot strength-reduce its +2/+4 accesses into a second IV. That is what - * gives ONE register with offsets 0/2/4 (unpinned -> 254 ins, extra IV). - * - `p2 = p1 + 2` (two walked source pointers): `p1[0]` is a bare deref - * (excluded from givs, loop-map L1 rule 4) so p1 stays the biv used at - * offset 0, and p2 is the second IV carrying the -2/0 offset cluster. - * - `while` loops with `i++` written BEFORE the pointer bumps: the increment - * LUID order decides which bump fills the first load-delay slot. - * - `s16 idx[4]` as a real ARRAY (ARRAY_REF => MEM_IN_STRUCT_P): that makes - * the varying-address packet store conflict with the stack slots, so CSE - * cannot forward idx[1..3] and gcc re-loads them with `lh` (an - * INDIRECT_REF `*(s16*)(buf+0x82)` forwards them and loses the reloads). - * - `D_800A651C[][5]` / `D_801E01Dx[][4]` two-dimensional externs: the 1-D - * `sym + byte_offset` spelling makes gcc materialise `&D_800A651C` into a - * hoisted callee-saved register ($s5, +4 ins); the 2-D array-ref keeps the - * symbol folded in the MEM address (gas `lw $2,sym($1)` macro) and makes the - * table index a REDUCED GIV, whose preheader init lands AFTER the hoisted - * `addiu $s3,$sp,0x30` movable (target order s3 -> s2 -> s0). - * - `type2 = type + zr` ($zero pin): the target keeps TWO pseudos for - * (attr & 0xFF) — $a0 for the pre-call use and $s1 for the post-call one — - * so a plain second variable would be propagated away by CSE. - * - `pk[7] = 0x3A` written AFTER the 0x1C colour store: it only conflicts with - * the 0x04 store, so the scheduler sinks it into the `lh 0xB6($sp)` delay - * slot exactly as in the target (§135 idiom 4, source order sets the sink). - */ - -extern void func_8012E32C(void); -extern void func_8018A6C8(void *, s32); -extern s32 RotNclip4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); -extern s32 RotTransPers4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); -extern void *func_80010A08(s32); -extern s32 AddPrim(s32, void *); -extern void func_8012E28C(s32, s32); - -void func_8018A2E0(u16 *a0, s32 a1) -{ - - extern s32 D_800A651C[][5]; - extern u16 D_801E00B0[]; - extern u16 D_801E0130[]; - extern u16 D_801E01D0[][4]; - extern u16 D_801E01D2[][4]; - extern u16 D_801E01D4[][4]; - extern u16 D_801E01D6[][4]; - register s32 zr __asm__("$0"); - - u16 pad0[16]; /* dead: locals begin at sp+0x30, va must land at sp+0x50 */ - u16 va[16]; /* sp+0x50 — outer quad, 4 x SVECTOR */ - u16 vb[16]; /* sp+0x70 — inner quad, 4 x SVECTOR */ - s32 sxy[8]; /* sp+0x90 — [0..3] RotNclip4, [4..7] RotTransPers4 */ - s16 idx[4]; /* sp+0xB0 */ - s32 p; /* sp+0xB8 */ - s32 otz; /* sp+0xBC */ - s32 flag; /* sp+0xC0 */ - - u16 attr; - s32 type; - s32 type2; - u16 *p1; - u16 *p2; - register u16 *dst __asm__("$4"); - s32 i; - u8 *pk; - s32 j; - - func_8012E32C(); - - attr = a0[3]; - type = attr & 0xFF; - type2 = type + zr; - if ((attr & 0xF00) == 0x200) { - func_8018A6C8(a0, a1); - return; - } - - p1 = (u16 *)((u8 *)D_801E00B0 + type * 0x20); - i = 0; - p2 = p1 + 2; - dst = va; - while (i < 4) { - dst[0] = a0[0] + p1[0]; - dst[1] = a0[1] + p2[-1]; - dst[2] = a0[2] + p2[0]; - i++; - p1 += 4; - p2 += 4; - dst += 4; - } - - if (RotNclip4((s32)&va[0], (s32)&va[4], (s32)&va[8], (s32)&va[12], - &sxy[0], &sxy[1], &sxy[2], &sxy[3], &p, &otz, &flag) <= 0) { - return; - } - - otz -= 0x10; - if (otz < 0) { - return; - } - if (otz >= 0x1000) { - return; - } - - p1 = (u16 *)((u8 *)D_801E0130 + type2 * 0x20); - i = 0; - p2 = p1 + 2; - dst = vb; - while (i < 4) { - dst[0] = a0[0] + p1[0]; - dst[1] = a0[1] + p2[-1]; - dst[2] = a0[2] + p2[0]; - i++; - p1 += 4; - p2 += 4; - dst += 4; - } - - RotTransPers4((s32)&vb[0], (s32)&vb[4], (s32)&vb[8], (s32)&vb[12], - &sxy[4], &sxy[5], &sxy[6], &sxy[7], &p, &flag); - - pk = func_80010A08(0xA8); - - for (j = 0; j < 4; j++) { - idx[0] = D_801E01D0[j][0]; - idx[1] = D_801E01D2[j][0]; - idx[2] = D_801E01D4[j][0]; - idx[3] = D_801E01D6[j][0]; - *(s32 *)(pk + 0x4) = a1 & -(idx[0] < 4); - *(s32 *)(pk + 0xC) = a1 & -(idx[1] < 4); - *(s32 *)(pk + 0x14) = a1 & -(idx[2] < 4); - *(s32 *)(pk + 0x1C) = a1 & -(idx[3] < 4); - pk[7] = 0x3A; - *(u32 *)(pk + 0x0) = 0x08000000; - *(s32 *)(pk + 0x8) = sxy[idx[0]]; - *(s32 *)(pk + 0x10) = sxy[idx[1]]; - *(s32 *)(pk + 0x18) = sxy[idx[2]]; - *(s32 *)(pk + 0x20) = sxy[idx[3]]; - AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); - pk += 0x24; - } - - *(s32 *)(pk + 0x4) = a1; - pk[7] = 0x2A; - *(u32 *)(pk + 0x0) = 0x05000000; - *(s32 *)(pk + 0x8) = sxy[0]; - *(s32 *)(pk + 0xC) = sxy[1]; - *(s32 *)(pk + 0x10) = sxy[2]; - *(s32 *)(pk + 0x14) = sxy[3]; - AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); - func_8012E28C(otz, 1); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018A6C8); - -DEFINE_func_8018A740() /* dedup: shared engine-core @0x8018A740 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018A77C); - -DEFINE_func_8018A898() /* dedup: shared engine-core @0x8018A898 (src/shared) */ - - -extern void (*D_801E0524[])(void); - -void func_8018A8D4(void *a0) { - D_801E0524[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E0534[])(void); - -void func_8018A910(void *a0) { - D_801E0534[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E0544[])(void); - -void func_8018A94C(void *a0) { - D_801E0544[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8018A988() /* dedup: shared engine-core @0x8018A988 (src/shared) */ - - -extern s32 func_8012BEE8(s32 a0); -extern s32 rand(void); - -void func_8018A990(s32 param_1) { - s32 uVar1; - s32 iVar2; - register s32 iVar3 __asm__("$3"); - register s32 iVar4 __asm__("$16"); - u32 uVar3; - - uVar1 = *(u16 *)(param_1 + 0x34); - if (uVar1 == 1) { - goto case1; - } - if (uVar1 < 2) { - if (uVar1 == 0) { - goto case0; - } - return; - } - if (uVar1 == 2) { - goto case2; - } - if (uVar1 != 3) { - return; - } - goto case3; - -case0: - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(s32 *)(param_1 + 0x1c) = 0x40; - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - uVar3 = rand(); - iVar4 = uVar3 & 0x3fff; - iVar4 = iVar4 + 0x7800; - uVar3 = rand(); - if ((uVar3 & 1) == 0) { - iVar4 = -iVar4; - } - *(s32 *)(param_1 + 0xe0) = iVar4; - *(s32 *)(param_1 + 0xe4) = 0; - return; - -case1: - iVar3 = *(s32 *)(param_1 + 0xe4); - iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; - *(s32 *)(param_1 + 0xe4) = iVar3; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - uVar3 = rand(); - uVar3 = uVar3 & 0x3f; - goto tail; - -case2: - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + *(s32 *)(param_1 + 0xe4); - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(s32 *)(param_1 + 0x1c) = 0x40; - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - *(s32 *)(param_1 + 0xe0) = -*(s32 *)(param_1 + 0xe0); - return; - -case3: - __asm__ __volatile__("" ::: "memory"); - iVar3 = *(s32 *)(param_1 + 0xe4); - iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; - *(s32 *)(param_1 + 0xe4) = iVar3; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(u16 *)(param_1 + 0x34) = 0; - uVar3 = rand(); - uVar3 = uVar3 & 0xff; - -tail: - *(u32 *)(param_1 + 0x1c) = uVar3 + 0x40; -} - - -DEFINE_func_8018AB3C() /* dedup: shared engine-core @0x8018AB3C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018AB78); - - -extern s32 D_801E01F0; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018ACD4(void) { - D_801E7980 = &D_801E01F0; - func_8018A168(0x474, 0x4B0); -} - - - -extern s32 D_801E0228; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AD08(void) { - D_801E7980 = &D_801E0228; - func_8018A168(0x474, 0x4EC); -} - - - -extern s32 D_801E0260; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AD3C(void) { - D_801E7980 = &D_801E0260; - func_8018A168(0x474, 0x4B0); -} - - - -extern s32 D_801E0288; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AD70(void) { - D_801E7980 = &D_801E0288; - func_8018A168(0x474, 0x4B0); -} - - - -extern s32 D_801E02C0; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018ADA4(void) { - D_801E7980 = &D_801E02C0; - func_8018A168(0x474, 0x528); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018ADD8); - - -extern s32 D_801E0338; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AE4C(void) { - D_801E7980 = &D_801E0338; - func_8018A168(0x474, 0x1A4); -} - - - - -extern s32 func_80029504(void); -extern void func_8018A168(s32 arg0, s32 arg1); - -s32 func_8018AE80(void) { - - extern s32 D_801E0370; - s32 v; - D_801E7980 = (s32)&D_801E0370; - v = func_80029504(); - if ((u32)(v - 0x64) < 0x1F4) { - return -1; - } - func_8018A168(0x96, 0xF0); -} - - - -extern s32 D_801E0390; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AECC(void) { - D_801E7980 = &D_801E0390; - func_8018A168(0x12c, 0x1A4); -} - - -DEFINE_func_8018AF00() /* dedup: shared engine-core @0x8018AF00 (src/shared) */ - - -extern s32 D_801E0440; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AF34(void) { - D_801E7980 = &D_801E0440; - func_8018A168(0x474, 0x4B0); -} - - - - -extern s32 func_80029504(void); -extern void func_8018A168(s32 arg0, s32 arg1); - -s32 func_8018AF68(void) { - - extern s32 D_801E0470; - s32 v; - D_801E7980 = (s32)&D_801E0470; - v = func_80029504(); - if ((u32)(v - 0x64) < 0x1F4) { - return -1; - } - func_8018A168(0x474, 0x78); -} - - - -extern s32 D_801E0488; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AFB4(void) { - D_801E7980 = &D_801E0488; - func_8018A168(0x564, 0x1A4); -} - - -DEFINE_func_8018AFE8() /* dedup: shared engine-core @0x8018AFE8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018AFF0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B0AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B158); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B19C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B2B8); - - -extern void func_8012B414(int a0); - void func_8018B354(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B388); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B400); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B448); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B4EC); - -DEFINE_func_8018B564() /* dedup: shared engine-core @0x8018B564 (src/shared) */ - - -extern void (*D_801E056C[])(void); - -void func_8018B570(void *a0) { - D_801E056C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B5AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B614); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B660); - -extern s32 func_8012E57C(s32 a0, s32 a1); - -void func_8018B6A0(void *a0) { - s32 v0; - - v0 = func_8012E57C(0x61, 0xD); - *(s32 *)((char *)a0 + 0xCC) = v0; - v0 = func_8018B5AC(); - - if (v0 != 0) { - v0 = 2; - } else { - v0 = 1; - } - - *(s16 *)((char *)a0 + 0x2) = v0; -} - - -DEFINE_func_8018B6E8() /* dedup: shared engine-core @0x8018B6E8 (src/shared) */ - - - -extern void (*D_801E0580[])(void); - -void func_8018B6F4(void *a0) { - D_801E0580[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B730); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B798); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B7FC); - -DEFINE_func_8018B868() /* dedup: shared engine-core @0x8018B868 (src/shared) */ - - - -extern void (*D_801E0594[])(void); - -void func_8018B874(void *a0) { - D_801E0594[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B8B0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B904); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B948); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018B988); - -DEFINE_func_8018B9D0() /* dedup: shared engine-core @0x8018B9D0 (src/shared) */ - - -extern void (*D_801E05A8[])(void); - -void func_8018B9DC(void *a0) { - D_801E05A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BA18); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BA80); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BAE4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BB50); - - -extern void (*D_801E05B4[])(void); - -void func_8018BC3C(void *a0) { - D_801E05B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BC78); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BCDC); - - -extern void (*D_801E05BC[])(void); - -void func_8018BD58(void *a0) { - D_801E05BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8018BD94(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BDA4); - - -extern void func_80184CB8(s32*, s32); - extern short D_801E05C4; - void func_8018BDE0(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_801E05C4); - } - - - -extern void func_80184CB8(s32*, s32); - extern short D_801E05C4; - void func_8018BE0C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 3; - ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_801E05C4); - } - - - -extern void (*D_801E0690[])(void); - -void func_8018BE38(void *a0) { - D_801E0690[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BE74); - -extern s32 func_8014CB1C(void); - s32 func_8018BEE8(void) { - return func_8014CB1C() != 0; - } - - -DEFINE_func_8018BF08() /* dedup: shared engine-core @0x8018BF08 (src/shared) */ - - - - -extern void func_80178CBC(s32, s32); - extern short D_801E0648; - void func_8018BF34(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(short *)((char *)a0 + 0x34) = 0; - ((void (*)(s32 *, s32))func_80178CBC)((s32 *)a0, (s32)&D_801E0648); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BF64); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018BFCC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C038); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C0B0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C114); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C1E0); - - -extern void func_80184CB8(s32*, s32); - extern short D_801E06A8; - void func_8018C24C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_801E06A8); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C278); - - -extern void (*D_801E077C[])(void); - -void func_8018C368(void *a0) { - D_801E077C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801E070C; - void func_8018C3A4(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801E070C); - } - - -extern s32 func_800D0EC4(); -s32 func_8018C3D0(void) { - return func_800D0EC4() == 0; -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C3F0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C494); - - -extern s32 func_80029504(void); -extern s32 func_80184D00(void); -extern s32 func_80184E44(void); -extern s32 func_80184BAC(s32 arg0, s32 arg1); -extern void func_80184CB8(s32*, s32); - -void func_8018C518(void *a0) { - - extern short D_801E06A8; - void *s0 = a0; - s32 v1 = func_80029504(); - s32 v0; - - if (v1 < 0xC8) { - v0 = func_80184D00(); - v1 = 3; - if (v0 == v1) { - return; - } - v0 = func_80184BAC(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } else if (v1 < 0x258) { - v0 = 1; - } else if (v1 < 0x384) { - v0 = func_80184BAC(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } else { - v0 = func_80184E44(); - v1 = 1; - if (v0 == v1) { - return; - } - v0 = func_80184BAC(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } - - *(s16 *)((char *)s0 + 0x2) = 0x1; - ((void (*)(s32, s32))func_80184CB8)((s32)s0, (s32)&D_801E06A8); -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_80184CB8(s32*, s32); - -void func_8018C5AC(void * arg0) { - - extern short D_801E06A8; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)arg0); - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_801E06A8); - } -} - - - -extern void (*D_801E3AF4[])(void); - -void func_8018C5FC(void *a0) { - D_801E3AF4[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -/* Declarations conformed to the TU (ov_SC04_018_jr_8017AE2C.c) — lever (A): - * func_8012A828 : TU declares `extern void func_8012A828(s32*, s32);` - * at L3460 / L4615 / L5083 / L5372 / L5859 / L6004 / L6155 / - * L6479 / L6504 / L6529. The draft's `(s32, s32)` form caused - * the 7697-vs-6529 conflict. Conformed here; the type - * disagreement is pushed to a cast at the call site. - * D_8018D540 : TU declares `extern u8 D_8018D540[];` (block scope, L3467). - * Conformed; `(s32)D_8018D540` == `(s32)&D_8018D540`. - * func_801788B8 : verbatim from TU L2532 / L7756 (below the splice point). - * func_8012C354, D_801E39E0, func_8018C730, func_8018C638 : no other - * declaration anywhere in the TU (func_8018C730 / func_8018C638 - * appear only as INCLUDE_ASM, which emits no C declaration). - * - * Body: the original draft was NOT byte-correct. `*(u16 *)(x + 2) = 1;` must be - * sequenced BEFORE the func_8012A828 call, not after it — with it after, gcc - * coalesces the store base onto $a0 (`sh v0,2(a0)`) and re-emits the arg copy, - * giving a 6-instruction ADDRESSING/cse diff. Moved above the call; both stores - * now retire off $s0 and the sh lands in the jal delay slot, as in the target. */ - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8012A828(s32*, s32); -extern s32 func_801788B8(s32 arg0, s32 arg1); - -extern void func_8018C730(void); - -void func_8018C638(s32 a0) { - - extern M2C_UNK D_801E39E0; - extern u8 D_8018D540[]; - s32 s0 = a0; - if (func_8012C354(a0, (s32)&D_801E39E0)) { - *(u8 *)(s0 + 0xC0) = 1; - *(u16 *)(s0 + 0x2) = 1; - func_8012A828((s32 *)s0, (s32)D_8018D540); - func_801788B8(s0, (s32)func_8018C730); - } -} - - -DEFINE_func_8018C69C() /* dedup: shared engine-core @0x8018C69C (src/shared) */ - - -extern void func_80178CBC(s32, s32); - -void func_8018C6A4(s32 *a0) -{ - - extern signed char D_801E3AD0[]; - s32 v0; - - v0 = *(s16 *)((s32)a0 + 0x70); - v0 = v0 * 4; - ((void (*)(s32 *, s32))func_80178CBC)(a0, *(s32 *)((s32)D_801E3AD0 + v0)); - *(s16 *)((s32)a0 + 0x2) = 0x3; -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8018C6F0(s32 a0) { - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C730); - - -extern void (*D_801E3BA4[])(void); - -void func_8018C78C(void *a0) { - D_801E3BA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C7C8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C7F0); - - - -s32 func_8018C8A8(void) -{ - - extern u16 D_80126B5E; - extern u16 D_80126B66; - extern u16 D_80126B62; - s16 v1; - s32 result; - - v1 = *(s16 *)&D_80126B5E; - if (v1 < 0x400) { - result = 0; - } else if (v1 >= 0x501) { - result = 0; - } else { - v1 = *(s16 *)&D_80126B66; - if (v1 < 0x580) { - result = 0; - } else if (v1 >= 0x601) { - result = 0; - } else { - v1 = *(s16 *)&D_80126B62; - result = (v1 >= -0x200); - } - } - return result; -} - - -extern void func_8012B2CC(s32 arg); - void func_8018C90C(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 2; - *(s16 *)(v1 + 0x12) = -0x600; - func_8012B2CC((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018C93C); - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_8012B2CC(s32 a0); -extern s32 func_801788B8(s32 arg0, s32 arg1); -extern s32 func_80029504(void); -extern s32 func_80029178(s32 arg); -extern void func_8018CB18(void); - -void func_8018C96C(void *arg0) { - - extern u8 D_801DE040[]; - extern u8 D_801DE130[]; - extern u8 D_801E3BAC[]; - extern u8 D_801E3BBC[]; - s32 v0; - s32 t; - s32 *p; - - v0 = ((s32 (*)(void *))func_8012C1B8)(arg0); - *(s32 *)((char *)arg0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(arg0); - } else { - func_8001C214(v0, *(s16 *)((char *)arg0 + 0x70) == 0 ? (s32)&D_801DE040[0] : (s32)&D_801DE130[0]); - *(s16 *)((char *)arg0 + 0x5C) = 0x800; - *(s32 *)((char *)arg0 + 0x58) = - (s32)&D_801E3BBC[*(s16 *)((char *)arg0 + 0x70) * 0x10] | 0x40000000; - func_8012E8E0((s32)arg0, (s32)&D_801E3BAC[*(s16 *)((char *)arg0 + 0x70) * 8]); - *(s16 *)(*(s32 *)((char *)arg0 + 0x68) + 0xC) = 0x7FFF; - t = func_80029504(); - if ((func_80029178(0xF6) & 0xFF) == 0 && t < 0xE6) { - if (*(s16 *)((char *)arg0 + 0x70) == 0) { - *(s16 *)((char *)arg0 + 0x2) = 1; - *(s16 *)((char *)arg0 + 0x34) = 0; - func_801788B8((s32)arg0, (s32)func_8018CB18); - } else { - s32 *q = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 3; - *(s16 *)((char *)arg0 + 0x34) = 0; - *(s16 *)((char *)q + 0x12) = 0; - *(s32 *)((char *)arg0 + 0x1C) = 0x30; - } - } else { - if (*(s16 *)((char *)arg0 + 0x70) == 0) { - p = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 2; - *(s16 *)((char *)p + 0x12) = -0x600; - func_8012B2CC((s32)arg0); - } else { - p = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 4; - *(s16 *)((char *)p + 0x12) = 0x600; - func_8012B2CC((s32)arg0); - } - } - } -} - - - -extern void (*D_801E3CEC[])(void); - -void func_8018CADC(void *a0) { - D_801E3CEC[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -/* func_8018CB18 — state-2 gate for the SC04_018 actor state machine. - * - * Reads the actor's linked object (a0->0x64), requires its state word (+0x2) == 1 - * and the actor's own +0x34 flag clear, then asks func_8018C8A8() for permission; - * on success it stamps 1 into the linked object's +0x34, pokes func_80178BF8() and - * returns the address of the next callback (func_80172710). - * - * DECL SURFACE (§73 / §37): the TU already carries a fleet-canonical forward decl - * `extern void func_8018CB18(void);` (ov_SC04_018_jr_8017AE2C.c L7759) - * used only to take the function's ADDRESS at L7786. The byte-true signature - * disagrees on BOTH §73 axes (return void->s32 AND params void->void*), so neither - * the fleet widen nor a cast-at-use fixes it. Instead the definition is emitted - * under the C identifier `aF8018CB18` with an __asm__("func_8018CB18") label - * (§37 asm-label alias, the proven function-definition form — cf. - * src/ov_SC03_099/ov_SC03_099_after.c L533). The C-level name never collides with - * the canonical decl, the emitted symbol is unchanged, and codegen is byte-identical - * (verified: match_one MATCH 31/31 with and without the alias). - * - * ORACLE: .venv/bin/python tools/match_one.py func_8018CB18 \ - * --c .run/s7/ov_SC04_018/func_8018CB18.c \ - * --asm-subdir asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C -> MATCH (31 ins) - */ - -extern s32 func_8018C8A8(void); -extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2539) */ -extern void func_80172710(void); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2231) */ - -s32 aF8018CB18(void *a0) __asm__("func_8018CB18"); - -s32 aF8018CB18(void *a0) -{ - if (*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) != 1) { - return 0; - } - if (*(u16 *)((s32)a0 + 0x34) != 0) { - return 0; - } - if (func_8018C8A8() == 0) { - return 0; - } - *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x34) = 1; - func_80178BF8(); - return (s32)func_80172710; -} - - -extern void func_80029124(s32, s32); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_800D0F4C(s32 a0); -extern s32 func_8012E57C(s32 a0, s32 a1); - - -void func_8018CB94(void *a0) -{ - s32 result; - - *(u16 *)((s32)a0 + 0x34) = *(u16 *)((s32)a0 + 0x34) + 1; - - func_8002D4C8(0x7A0, 0); - func_80029124(0xF6, 1); - func_800D0F4C(0x59); - - result = func_8012E57C(0x1F2, 1); - - if (result) { - *(u16 *)(result + 0x34) = *(u16 *)(result + 0x34) + 1; - } -} - - - - - -s32 func_8018CC04(void) { - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern s32 D_801E79A0; - return !(D_801E79A0 ^ 2); -} - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8018CC1C(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018CC40); - - -extern s32 func_8012BEE8(s32 a0); -extern void func_8018C93C(void *a0); - -void func_8018CD74(void *a0) { - u16 v1; - - v1 = *(u16 *)((char *)a0 + 0x34); - if (v1 == 0) { - return; - } - if (v1 != 1) { - return; - } - { - u16 *p = (u16 *)*(s32 *)((char *)a0 + 0x20); - - *(u16 *)((char *)p + 0x12) = *(u16 *)((char *)p + 0x12) + 0x20; - if (((s32 (*)(void))func_8012BEE8)()) { - func_8018C93C(a0); - } - } -} - - -DEFINE_func_8018CDDC() /* dedup: shared engine-core @0x8018CDDC (src/shared) */ - -DEFINE_func_8018CDE4() /* dedup: shared engine-core @0x8018CDE4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801878E8", func_8018CDEC); - - - - - diff --git a/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c b/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c new file mode 100644 index 0000000000..32b12deb3a --- /dev/null +++ b/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c @@ -0,0 +1,4441 @@ +#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 { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +typedef void (*Handler)(struct Entry_8016E95C *); +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F74C; +extern u8 D_8018F6BC; +extern u8 D_8018F698; +extern u8 D_8018F674; +extern u8 D_8018F728; +extern u8 D_8018F704; +extern u8 D_8018F6E0; +extern u8 D_8018F650; +extern void func_80145934(void); +extern u8 D_8018F7DC; +extern u8 D_8018F7B8; +extern u8 D_8018F794; +extern u8 D_8018F770; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +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 s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EBD4[]; +extern unsigned char D_8018EC04[]; +extern unsigned char D_8018EC54[]; +extern unsigned char D_8018EC84[]; +extern unsigned char D_8018ECB4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ED04[])(void *); +extern u8 D_80126BA4; +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 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_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +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 s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +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_80015954(s32 a0, s32 a1); +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 s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +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 void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +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(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +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_80147478(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_800484EC(s32 a0, s32 a1, s32 a2); +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 void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(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_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 u8 D_800B9A64; +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_80047D3C(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_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_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +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 void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +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 void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +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_80149FA8(void); +extern s32 D_8018EDCC[]; +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 s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +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_80016714(void *a0, s32 a1); +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 void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +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 void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +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_8014B5B0(s32 *a0); +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_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(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 s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(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_8014C088(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 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE54[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +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 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE5C; +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 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 void func_8014C978(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 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_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +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 void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); +extern s32 func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +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 s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +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 s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +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_8014E6F8(struct SubE6F8 *a0); +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 s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +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_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5BA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5BAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(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 short func_801508F8(s32 a0); +extern s32 D_8018EE8C; +extern s32 D_80126990; +extern s32 D_80126994; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 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_8012DB84(void); +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_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 s32 func_80151944(void); +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_80154A74(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 void (*D_8018EF34[])(void); +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_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF58[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF48; +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 (*D_8018EF6C[])(void); +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 u8 D_8018EF78[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF88[])(void); +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 (*D_8018EFA0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF90; +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 (*D_8018EFB4[])(void); +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 (*D_8018EFD0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EFC0; +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 (*D_8018EFE4[])(void); +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 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 (*D_8018EFF8[])(void); +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 (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +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 s32 D_8018F00C; +extern void (*D_8018F034[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F014; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +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_800183E0(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_80029178(s32); +extern int (*D_8018F080[])(void); +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 void (*D_8018F084[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(s16 *a0, s16 *a1); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4E8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F4F8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern s32 func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E5BE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F520[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F500; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F510; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F560[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F568[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F534; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F574[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F544; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F5B0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F584[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5BF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F800[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F620[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F8A4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F9F8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F814; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FA00[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F824; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F844; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018FA08[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(s32 arg0); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018FA30[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018FA3C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern void func_8015CC40(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018F8B0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018FAE0; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018EBC4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018FAF4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018FB30[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018FB78; +extern u16 D_8018FB7A; +extern u16 D_8018FB7C; +extern s32 D_8018FB80; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018FB88; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018F894; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018FC0C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018FCBC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018FCEC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018FD50; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E5C00[]; +extern void func_8016216C(void); +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018FD74[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E5C58[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018FDBC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018FDAC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E5054[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018FDC4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018FE18[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018FDE0; +extern s16 D_8018FE14; +extern s16 D_8018FE12; +extern s16 D_8018FE10; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018FE24[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E5CB8; +extern u8 D_801E5CB9; +extern u8 D_801E5CBA; +extern u8 D_801E5CBB; +extern u8 D_801E5CBC; +extern u8 D_801E5CBD; +extern u8 D_801E5CBE; +extern u8 D_801E5CBF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018FE34[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E5CF8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018FE78[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018FEF4[]; +extern s32 D_8018FF14[]; +extern u8 D_8018FF90[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018FFB0[]; +extern u8 D_8018FFD0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8019006C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801900E8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E5064; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801900F4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801900FC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801901C4[])(void); +extern void func_80166618(void *a0); +extern void (*D_801901D4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801901E4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801901F0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80190150[]; +extern u8 D_80190164[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80190208[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80190210[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80190218[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80190220[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80190228[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80190230[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80190238[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801902EC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801902F4[])(void); +extern void func_80169F00(void *a0); +extern char D_801902A4[]; +extern char D_80190264[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8019032C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80190338[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80190380[])(void); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801903FC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E6018; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801903F0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80190434[]; +extern unsigned short D_8019043C[]; +extern unsigned short D_80190444[]; +extern unsigned char D_801E6020[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E6018; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8019044C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E6154; +extern M2C_UNK D_801E6158; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E60E0; +extern void (*D_8019047C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E615C[]; +extern u8 D_801E6164[]; +extern u8 D_801E6114[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80190484[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801904A0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801904A8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190510[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801904B4; +extern u8 D_801904C0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80190544[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8019054C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801905A0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801905D4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801905C4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801905F0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32 _arg0); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80190668[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80190670[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80190678[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80190680[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80190688[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80190690[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8019069C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801906A8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801906B4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801906C4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801906D4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801906DC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801906E4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801906EC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801906F4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801906FC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80190704[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8019070C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80190714[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8019071C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80190724[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8019072C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80190734[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8019073C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80190744[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8019074C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80190754[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8019075C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80190764[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8019076C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80190774[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8019077C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80190784[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801907C8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8019078C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801907F8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80190834[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern void func_801748EC(void); +extern s32 func_801749C8(); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8019088C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8019089C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801908A4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175494(void); +extern void (*D_80190A0C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80190A18[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E52AC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801789AC(s32 arg0); +extern s16 D_801E7AB0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E6898; +extern short D_801E7B24; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +extern s32 func_80178D40(s32 arg0, s32 arg1); +extern void func_80179B28(s32 a0); +extern void func_80179B74(u16 *p); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179DCC(short a0); +extern void func_80179DF8(void); +extern void func_80179E1C(short a0); +extern void func_80179E48(s16 a0); +extern void func_80179E74(s16 a0); +extern void func_80179EA0(u16 *a0); +extern void func_80179EE8(short a0); +extern void func_80179F14(s16 a0, s16 a1); +extern void func_80179F44(void); +extern void func_80179F6C(short a0); +extern void func_80179F98(u16 *a0); +extern void func_80179FEC(u16 *a0); +extern void func_8017A040(u16 *a0); +extern s32 D_801E6CC4; +extern void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +extern s32 D_801E6CEC; +extern void func_8017A144(s32 a0); +extern void func_8017A180(void); +extern void func_8017A1A8(void); +extern void func_8017A1D0(void); +extern void func_8017A1F8(void); +extern void func_8017A220(void); +extern void func_8017A248(void); +extern void func_8017A270(void); +extern void func_8017A298(void); +extern void func_8017A2C0(void); +extern void func_8017A2E8(void); +extern void func_8017A310(void); +extern void func_8017A338(void); +extern void func_8017A360(void); +extern void func_8017A388(void); +extern s16 D_801E6CA8; +extern s32 func_8017A3B0(void); +extern short D_801E6CE4; +extern short D_801E6CE0; +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); +extern int func_8017A3D8(void); +extern void func_80172310(u8*); +extern void func_80172780(void*); +extern void func_80172894(void*); +extern void func_801729B0(s32); +extern void func_80172B14(s16); +extern void func_80172C50(u16 *); +extern void func_80172D68(s32); +extern void func_801733FC(s16, u16 *); +extern void func_80173460(s32, s32); +extern void func_801734BC(s32, s32); +extern void func_801736B0(s32, s32); +extern void func_801737B8(s16); +extern void func_801738DC(s16); +extern void func_80173A28(s32, s32, s32, s32, s32, s32); +extern void func_80174438(s32); +extern void func_8017A4AC(void); +extern s32 func_8017AD0C(s32 arg0); +extern s32 func_8017AD0C(s32); +extern s32 func_8017ADE8(s32 a0); +extern s32 func_8017AE08(void); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012AD80(s32 a0); +extern s32 func_8012B030(u8 *a0); +extern s32 func_8012B744(void *a0, void *a1); +extern s32 func_8012BE98(s32 a0, u16 *a1); +extern s16 D_801E7A68; +extern s16 D_801E7A6A; +extern s16 D_801E7A74; +extern void func_8017AE2C(s32 param_1); +extern void func_8017B0E4(int param_1, int param_2); +extern s16 D_801E6CAC; +extern u16 D_801E6D2C; +extern u16 D_801E6D2E; +extern u16 D_801E6D30; +extern void func_8017B1D8(void); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B490(s32 param); +extern s32 func_8017B614(s32 param_1, s32 param_2); +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern u8 D_8012694C; +extern s16 D_801E6D24; +extern s16 D_801E6D26; +extern s16 D_801E6D28; +extern s16 D_801E6D1C; +extern s16 D_801E6D1E; +extern s16 D_801E6D20; +extern void func_8017B7A8(void); +extern s16 D_801E6D3C; +extern s16 D_801E6D3E; +extern s16 D_801E6D40; +extern s16 D_801E6D44; +extern s16 D_801E6D46; +extern s16 D_801E6D48; +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern short D_801E6D34; +extern short D_801E6D36; +extern short D_801E6D38; +extern void func_8017B940(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); +extern SV4 D_801E6CCC; +extern SV4 D_801E6CD4; +extern void func_8017BA3C(s32 param_1, s32 param_2); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void (*D_801E6CF4[10])(int); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8012A4BC(void); +extern void func_8017BCF4(int param_1); +extern void (*D_801E6CF0)(void); +extern void func_8017BD50(int param_1); +extern void (*D_80190BF4[])(void); +extern void func_8017BE60(void *a0); +extern void (*D_80190C94[])(void); +extern void func_8017BE9C(void *a0); +extern void (*D_80190C9C[])(void); +extern void func_8017BED8(void *a0); +extern void (*D_80190CA4[])(void); +extern void func_8017BF14(void *a0); +extern u8 *func_8012913C(s32 a0); +extern s32 func_8012C750(s32 a0); +extern void func_8017BF50(s32 a0); +extern void func_8017C094(void); +extern void func_8017C100(s32 param_1); +extern void func_8017C1AC(s32 param_1); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012A828(s32*, s32); +extern void func_8012B260(u8 *a0); +extern void func_8017C1EC(s32 a0); +extern void func_8017C2B0(s32 a0); +extern void (*D_80190CC4[])(void); +extern void func_8017C338(void *a0); +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_8017C374(s32 param_1); +extern void func_8017C538(u8 *p); +extern void (*D_80190CCC[])(void); +extern void func_8017C5CC(void *a0); +extern u8 D_80190CB8; +extern void func_8017C608(s32 a0); +extern void func_8017C6AC(int a0); +extern void func_8017C710(s32 arg0); +extern void (*D_80190CE4[])(void); +extern void func_8017D5F0(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_80190CD4; +extern void func_8017D62C(s32 arg0); +extern void func_8017D6A8(void); +extern void (*D_80190D1C[])(void); +extern void func_8017D6B0(s32 *param_1); +extern void func_8017DA08(void *arg0); +extern s32 func_8012AD50(void *arg0); +extern void func_8017D6EC(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_8017D9B8(void); +extern void func_8017DAC4(void *arg0); +extern void aF8017D77C(); +extern void func_80017714(void *); +extern u32 D_801E6FE8; +extern u16 D_80190D24[]; +extern u16 D_801E6FEC[]; +extern s32 D_80190D44; +extern void func_8017DC0C(void); +extern void func_8017E038(void *arg0); +extern s32 func_8017DC98(s32 param_1); +extern s32 func_8017DCE8(void); +extern void func_800D1E28(void); +extern s32 func_800D1D94(void); +extern void func_8001BFD0(void); +extern s32 func_8017DD7C(s32 a0); +extern void func_800D1EBC(void); +extern void func_8017DE2C(void); +extern s32 func_8017DE4C(void *a0); +extern void (*D_80190D64[])(void); +extern void func_8017DF34(void *a0); +extern void (*D_80190D6C[])(void); +extern void func_8017DF70(void *a0); +extern void (*D_80190D78[])(void); +extern void func_8017DFAC(void *a0); +extern void (*D_80190D84[])(void); +extern void func_8017DFE8(void *a0); +extern s32 D_80127050; +extern void func_8017E024(void); +extern void (*D_80191060[])(void); +extern void func_8017E038(void *a0); +extern void func_8017E074(void *a0); +extern void func_8017E088(void *a0); +extern void (*D_80191068[])(void); +extern void func_8017E0C0(void *a0); +extern void func_8017E0FC(u8 *a0); +extern void func_8017E110(void); +extern void func_8012A094(s32 a0); +extern void func_8017E1F4(void *a0); +extern void func_8017E130(void); +extern void (*D_80191070[])(void); +extern void func_8017E26C(s32 *a0, s32 a1); +extern void func_8017E3AC(s32 a0); +extern void func_8017E230(s32 *a0); +extern void func_8017E264(void *a0); +extern void aF8017E26C(); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017E3AC(s32 param_1); +extern void func_80184CB8(s32*, s32); +extern void func_8017E5A0(void * arg0); +extern void (*D_801912A8[])(void); +extern void func_8017E760(void *a0); +extern void func_8012A828(s32 *a0, s32 a1); +extern void func_8017E79C(short *a0); +extern void (*D_801912C8[])(void); +extern void func_8017E810(void *a0); +extern void func_80178CBC(s32 a0, s32 a1); +extern void func_8017E84C(void * arg0); +extern void func_8017E878(void * arg0); +extern void func_8012C588(s32, s32); +extern void func_8017E99C(void); +extern s32 func_80184BAC(s32 arg0, s32 arg1); +extern void func_8017E5A0(void *arg0); +extern void func_8017E9C0(void *arg0); +extern void func_8017EAAC(void * arg0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8017E79C(short*); +extern void func_8017EBA0(s32 a0); +extern void func_8017E7CC(void); +extern void func_8017EBE0(u8 *a0); +extern void func_8017F02C(void * arg0); +extern void (*D_8019155C[])(void); +extern void func_8017F058(void *a0); +extern void func_8017F094(void * arg0); +extern s32 func_8017F0C0(void); +extern void func_80029124(s32 arg0, s32 arg1); +extern void func_8017F108(void); +extern void func_80029514(int); +extern void func_8017F1A8(void); +extern void func_8017F28C(void * arg0); +extern void (*D_801916E4[])(void); +extern void func_8017F5BC(void *a0); +extern void func_80178CBC(s32, s32); +extern void func_8017F5F8(void *a0); +extern void func_8017F6D8(void *a0); +extern void func_8017F7B8(void *a0); +extern void func_8017F898(void *a0); +extern void func_80029124(s32 a, s32 b); +extern void func_8017FA34(void); +extern void func_8017FCD8(void * arg0); +extern void (*D_80191814[])(void); +extern void func_8017FF34(void *a0); +extern void (*D_801918E4[])(void); +extern void func_801800E0(void *a0); +extern s32 func_8018011C(void); +extern void func_8018015C(void); +extern void func_80180164(void * arg0); +extern void func_8012E8E0(s32, s32); +extern void func_8012E88C(s32); +extern void func_8012A828(s32 *a0, s32 a1); /* fleet-canonical sig (TU L3775) */ +extern void func_80184C90(s32); +extern void func_80184ED4(s32, s32, s32, s32); +extern void func_8018034C(void *arg0); +extern void (*D_801919C4[])(void); +extern void func_8018048C(void *a0); +extern s32 func_80184DD0(s32 a0); +extern void func_80180504(s32 a0); +extern s32 func_80180544(void); +extern void func_80180580(void *arg0); +extern s32 func_8012BD14(s32 a0); +extern s32 func_80180814(void *a0); +extern void func_80180888(void *arg0); +extern void func_8012E88C(s32 a0); +extern void func_80184C90(s32 a0); +extern void func_801808FC(void *a0); +extern void func_80184CB8(s32 *a0, s32 a1); +extern void func_801809DC(short *a0); +extern void (*D_80191A80[])(void); +extern void func_80180B6C(void *a0); +extern void func_80180C0C(void * arg0); +extern s32 func_801848DC(void); +extern s32 func_8018625C(void *); +extern s32 func_80178BF8(void); +extern s32 func_80180CC0(void *a0); +extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2541) */ +extern s32 func_80180D38(void *a0); +extern s32 func_80185BE0(s32 a0); +extern s32 func_80184FA4(void); +extern void func_80180EE8(void *a0); +extern void func_80181020(void *a0); +extern void func_80181244(short *param); +extern void func_801812D0(short *a0); +extern void (*D_80191B20[])(void); +extern void func_801812FC(void *a0); +extern void func_80181338(short *param); +extern void func_80181364(s32 a0); +extern void func_80181474(void * arg0); +extern s32 func_80181564(void *a0); +extern void func_8018170C(void * arg0); +extern void func_8018178C(void * arg0); +extern void (*D_80191BDC[])(void); +extern void func_80181924(void *a0); +extern s32 D_801D7598; +extern s32 D_801D2200; +extern void func_80181998(void); +extern s32 D_801E7018; +extern void func_801819B0(void); +extern void func_8012A828(s32 *, s32); +extern void func_801819C8(void *arg0); +extern void func_80181A28(s32 a0); +extern void func_801815DC(void *arg0); +extern void func_80181A68(void *arg0); +extern void func_801816A8(void *arg0); +extern void func_80181B34(void *arg0); +extern void func_80184ED4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8018170C(void *a0); +extern void func_80181BEC(void *arg0); +extern void func_80181738(void *arg0); +extern void func_80181C78(void *arg0); +extern void func_801817B8(void *arg0); +extern void func_80181DC4(void *arg0); +extern s32 func_80181EFC(void *a0); +extern void func_80181F70(void *arg0); +extern void func_80181FE4(void *a0); +extern void func_801821A8(void * arg0); +extern void (*D_80191EE4[])(void); +extern void func_8018233C(s32 *param_1); +extern void func_80182490(void * arg0); +extern s32 func_80182544(void *a0); +extern s32 func_801825BC(void *a0); +extern void func_8018276C(void *a0); +extern void func_801828B0(void *a0); +extern void func_801821A8(void *a0); +extern void func_80182920(void *arg0); +extern void func_80182ACC(void * arg0); +extern void func_80182B58(void *arg0); +extern void func_80182BCC(void *a0); +extern void (*D_80192014[])(void); +extern void func_80182C98(void *a0); +extern s32 D_801D7E84; +extern void func_80182D0C(void); +extern void func_80182D24(void *arg0); +extern void func_80182D84(s32 a0); +extern s32 func_80182DC4(void); +extern void func_80182E00(void *arg0); +extern void func_80182C24(void *arg0); +extern void func_80182ED8(void *arg0); +extern void func_80182F18(void *a0); +extern void func_801831AC(short *a0); +extern void func_8018330C(void * arg0); +extern void (*D_8019211C[])(void); +extern void func_80183438(void *a0); +extern void func_80183474(short *a0); +extern void func_801834A0(void * arg0); +extern void func_801834CC(short *a0); +extern void func_801834F8(s32 a0); +extern void func_80183538(s32 a0); +extern void func_801831AC(short*); +extern void func_80183674(void *arg0); +extern void func_801831D8(s32 *a0); +extern void func_801836C0(s32 *a0); +extern void func_8018370C(void * arg0); +extern void func_80183938(void *arg0); +extern void (*D_80192230[])(void); +extern void func_80183A68(void *a0); +extern void func_80183AA4(void * arg0); +extern void func_80183AD0(s32 a0); +extern s32 func_80183B10(void); +extern void func_80183B4C(void *arg0); +extern void func_80183B8C(s32 param_1); +extern s32 func_80183D80(void *a0); +extern void func_80183DF4(void * arg0); +extern void (*D_80192414[])(void); +extern void func_80184130(void *a0); +extern void func_8018416C(s32 a0); +extern void func_801841AC(s32 a0); +extern void func_801841EC(s32 a0); +extern s32 func_8018422C(void); +extern void func_80184268(short *a0); +extern void func_80184298(short *a0); +extern void func_801842C8(short *a0); +extern s16 D_801923A4; +extern void func_801842F8(void *arg0); +extern void func_80183FA8(s32 *a0); +extern void func_80184328(s32 *a0); +extern void func_80183DF4(void*); +extern void func_801843C4(s32 *a0); +extern void func_80183E20(void *arg0); +extern void func_80184460(void *arg0); +extern void func_8018479C(void *a0); +extern void func_801847AC(void *a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 func_801847BC(void *a0, void *a1); +extern void func_80184858(void *a0); +extern void func_80184884(void *a0); +extern void func_801848B0(void *a0); +extern s32 func_80184B04(s32 arg0); +extern s32 func_80184960(s32 a0); +extern s32 func_80184960(s32 arg); +extern void func_80184A90(u8 *a0); +extern void func_80184AC4(void *a0); +extern short D_800BA2BA; +extern void (*D_801B8720[])(void); +extern void func_80184B2C(void *a0); +extern void func_80184B68(void); +extern void func_80184B70(void *a0, s32 a1, s32 a2); +extern s32 func_80184BD0(u8 a0, u8 a1, u8 a2, u8 a3); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_80184C28(void *a0, s32 a1); +extern void func_80184CB0(void *a0); +extern void func_8012E8A8(u8 *a0); +extern s32 func_80184D00(void); +extern s32 func_80184D5C(void); +extern s32 aF80184DD0(); +extern s32 func_80184E44(void); +extern void func_80184EA0(void); +extern void func_8012B200(u8 *a0); +extern s32 aF80184FA4(); +extern s32 func_8018516C(s32 a0); +extern void (*D_801B8740[])(void); +extern void func_801851B4(void *a0); +extern void func_801851F0(void); +extern void func_801851F8(void); +extern void func_80185200(void); +extern void func_80185208(void); +extern void func_80185210(void); +extern void func_80185218(void *a0); +extern void func_8018525C(void); +extern void func_8001D0E8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80185264(s32 a0); +extern void func_80185978(s32 a0); +extern void func_80185904(s32 a0); +extern void func_801859D8(s32 a0); +extern void func_8018589C(s32 a0); +extern void func_801852EC(s32 a0); +extern void func_8001C97C(s32 a0); +extern void *func_80185C6C(void *a0); +extern void func_801854C4(s32 a0); +extern void func_80185D70(void *a0); +extern void func_80185664(void *a0); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern void func_80185EEC(void); +extern void func_801856E0(s32 a0); +extern void func_801857AC(void); +extern void func_801857CC(s32 a0); +extern s16 D_801B8788[]; +extern s32 D_801B8748[][2]; +extern void func_80185A58(s32 a0, s32 a1); +extern void func_8018602C(s32 a0, s32 a1); +extern void func_80185AB0(s32 a0); +extern void func_80185B10(s32 a0); +extern void func_80185B58(s32 a0); +extern void func_80185BA8(s32 a0); +extern s32 func_80185D10(void *a0); +extern s32 func_801862A8(void *a0); +extern void * func_80185C6C(void *a0); +extern void func_80185F20(void *a0); +extern void aF80185EEC(); +extern void func_80185F54(void *a0, s32 a1, s32 a2); +extern void func_80185FB8(s32 a0, s32 a1, s32 a2); +extern void (*D_801B8A3C[])(void); +extern void func_80186084(void *a0); +extern void func_801860C0(void *a0); +extern void func_8018613C(void *a0); +extern s32 func_801863B4(s32 a0); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012CB64(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8012F214(s32 arg0, s32 arg1, s32 arg2); +extern void func_80186410(void); +extern s16 func_80186450(void); +extern void func_80029444(void); +extern void func_801754A8(void); +extern void func_80141C04(void); +extern void func_801864AC(void); +extern u8 D_801151C8[]; +extern u16 D_80115112; +extern u8 D_80115138[]; +extern u8 D_80115148[]; +extern s32 D_80115130; +extern u8 D_800B9A15; +extern s16 D_801E7708; +extern s32 D_801E7700; +extern s32 D_801E7704; +extern s16 D_801E7790; +extern s16 D_801E7798; +extern s16 D_801E779C; +extern s16 D_801E77A0; +extern s16 D_801E77A4; +extern s16 D_801E77A8; +extern s16 D_801E77AC; +extern s32 D_801E7778; +extern s16 D_801E7030; +extern s32 D_801EC928; +extern s32 D_801E930C; +extern s32 D_801E9968; +extern s32 D_801B9410; +extern u8 D_801B94A4[]; +extern s32 D_801B946C[]; +extern s32 resLoad_lastId; +extern s32 func_800149E0(s32 a0); +extern void func_80137B80(void); +extern s32 func_801376E8(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_80139A68(s32 a0, u16 a1); +extern s16 func_8014168C(s16 a0); +extern void func_80188778(void); +extern s32 func_80189540(s32 a0, s16 a1); +extern s16 func_80189E54(s32 a0); +extern void func_801878E8(void); +extern void func_801EA0E4(s32 a0); +extern void func_80189EA0(void); +extern void func_801880EC(void); +extern s32 func_80188428(void); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern s32 *func_80189214(s32 *, void *, s32, void *, s32); +extern s32 func_80188B84(void *, s32, s32, s32, s32 *); +extern s32 * func_801889B8(s32 *ot, Panel_8017E978_801889B8 *w0, s16 idx); +/* ==== end §8b carried decl layer ==== */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_80188E1C; + +/* func_80188E1C — ov_SC04_018 / ov_SC04_018_jr_801878E8, 254 ins, jtbl_801E599C (8 entries, + * minval 7 -> `addiu $a0,$a0,-7` + HImode re-extension, so the switch index type is short). + * + * Modelled on the ALREADY-MATCHED structural twin in the same overlay, + * src/ov_SC04_018/ov_SC04_018_jr_8013FFD8.c:1065 `func_8014032C` — same family: + * `result = D_801117EC;` default, `switch ((short)param_1)`, `((short)param_2)` at every use, + * `func_800291B4(D_8018E2C8[...]) & 0xFF` -> `result = D_8018E388[uVar3];`. + * Case bodies are emitted in SOURCE order, so the source order here is 10,7,8,13,14,11,default + * (read off the block order after the jr: 80188E70, 80188EB8, 80188F28, 80189004, 80189044, + * 80189108, 801891E0). + * + * Cases 9 and 12 are ABSENT from the source: their jtbl slots (indices 2 and 5) point at the + * default label 0x801891E0, which is also the out-of-range target of `beqz $v0,.L801891E0`. + * + * Three register/shape constraints read off the target: + * (a) each `& 0xFF` temp is BLOCK-SCOPED. A single function-scope temp gives one pseudo whose + * live range crosses the calls in cases 13/14, so gcc pins it to $s0; the target keeps it in + * $v1 / $v0 (dead before the call) and uses $s0 only for the value that IS live across a call. + * (b) case 14 uses u8 (QImode) locals. `lbu` into an s32 local is provably <=0xFF, so gcc folds + * `(v & 0xFF)` away; the target emits `andi $v1,$a0,0xFF` for the compare and + * `andi $s3,$a0,0xFF` for `n + 0x62`, which is the QImode-pseudo widening pattern. + * Case 13 has NO such andi, so there the local is s32 — the two cases are deliberately + * asymmetric (cookbook §160d). Case 14 also REUSES that one variable for `v + 1` + * (`v = v + 1`, not `u8 n = v + 1`): two pseudos gave `addiu $v0,$a0,1; andi $s3,$v0`, + * one pseudo gives the target's in-place `addiu $a0,$a0,1; andi $s3,$a0`. That was the + * last 2-instruction residual. + * (c) in case 11 the arms whose `lui/addiu $s1,%hi/%lo(sym)` sits BEFORE the branch (filling the + * `lw` load-delay slot) are assign-then-conditionally-override, not if/else: the address + * materialisation has to be in the SAME basic block as the load for the post-reload scheduler + * to hoist it. The arm at .L801891B4 keeps its `nop`, so that one is a plain `if`. + */ + + +s32 func_80188E1C(s32 param_1, s32 param_2) { + extern void *func_80189DDC(s32 a0); + extern s16 D_80115126; + extern u8 D_801117EC[]; + extern u8 * D_801E76F4; + extern u8 * D_801E76FC; + extern u8 D_801E77B8[]; + extern u8 D_8018E2C8[]; + extern void * D_8018E388[]; + extern void * D_801E3D58[]; + extern void * D_801B93D4[]; + extern void * D_801B93F0[]; + extern s32 * D_801E7774[]; + extern s16 D_8010EDEE; + extern u8 D_8010EDF2; + extern s16 D_800A6586[]; + extern u8 D_801E8CEC[]; + extern u8 D_801E9174[]; + extern u8 D_801ECAA8[]; + extern u8 D_801ECAD4[]; + extern u8 D_801ECAEC[]; + extern u8 D_801ECB18[]; + + /* [T51] scoped in: these must not constrain the rest of the TU (cookbook §103). */ + + void *result; + + result = D_801117EC; + switch ((short)param_1) { + case 10: + if (D_80115126 != 5) { + result = D_8018E388[D_801E76F4[(short)param_2]]; + } else { + result = D_801B93D4[(short)param_2]; + } + break; + + case 7: { + s32 t = func_800291B4(D_8018E2C8[(short)param_2]) & 0xFF; + if (t != 0) { + s32 idx = t * 0xC; + if (*(s16 *)((u8 *)&D_8010EDEE + idx) != 0 && + D_80115126 == *((u8 *)&D_8010EDF2 + idx)) { + result = func_80189DDC(((short)param_2 & 3) + 6); + func_80139A68(*(s16 *)((u8 *)&D_8010EDEE + idx), 0); + } else { + result = func_80189DDC(5); + } + } + break; + } + + case 8: + if (D_80115148[0] != 0) { + s32 t = func_800291B4(D_8018E2C8[(short)param_2]) & 0xFF; + if (t != 0) { + s32 idx = t * 0xC; + if (*(s16 *)((u8 *)&D_8010EDEE + idx) != 0 && + D_80115126 == *((u8 *)&D_8010EDF2 + idx)) { + result = func_80189DDC(((short)param_2 & 3) + 6); + func_80139A68(*(s16 *)((u8 *)&D_8010EDEE + idx), 0); + } else { + result = func_80189DDC(5); + } + } + } else { + s32 t = func_800291B4(D_8018E2C8[(short)param_2]) & 0xFF; + if (t != 0) { + result = D_8018E388[t]; + } + } + break; + + case 13: { + s32 e = D_801E76FC[(short)param_2]; + if ((func_800291B4(e + 0x62) & 0x80) != 0) { + result = D_801E3D58[e]; + } + break; + } + + case 14: { + u8 v = D_801E77B8[(short)param_2]; + if (v != 0xFF) { + s32 code; + v = v + 1; + code = v + 0x62; + if ((func_800291B4(code) & 0xF0) == 0xC0) { + result = func_80189DDC(((short)param_2 & 1) | 6); + func_80139A68((s16)(D_800A6586[v] * 9 / 10), 0); + } else if ((func_800291B4(code) & 0xF0) == 0xE0) { + result = D_801E8CEC; + } + } + break; + } + + case 11: + if (D_80115126 == 4) { + if (D_80115148[0] == 0) { + result = D_801ECAA8; + if (D_801E7774[(short)param_2] == 0) { + result = D_801B93F0[(short)param_2]; + } + } else { + s32 *p = D_801E7774[(short)param_2]; + if (p != 0) { + result = D_801ECB18; + if (p[1] != 0) { + result = D_801ECAEC; + } + } else { + result = D_801ECAD4; + } + } + } else { + if (D_801E7774[(short)param_2] != 0) { + result = D_801E9174; + } + } + break; + + default: + result = func_80189DDC(0); + break; + } + return (s32)result; +} + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_80189214); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_80189540); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_80189DDC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_80189E14); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_80189E54); + + +/* func_80189EA0 — ov_SC03_001 (133 ins), exemplar of a 5-member open-only + * h_norm cluster. Builds the full-screen fade overlay: a DR_MODE-style 8-byte + * GP0 packet (0xE1000015), a 320x240 semi-transparent gouraud quad (POLY_G4, + * code 0x3A), and a second 8-byte GP0 packet (0xE1000240), each linked into the + * current OT with the psyq `addPrim` idiom. The type shapes and the + * `((PTag *)x)->addr = ((PTag *)ot)->addr; ((PTag *)ot)->addr = (u32)x;` pair + * are copied VERBATIM from the already-matched neighbour func_8018BCD4 in this + * same TU (§71) — Env_* / PTag_* there are the fleet-canonical shapes. + * + * Levers that were load-bearing (all byte-tested; the draft is PIN-FREE): + * §20 &D_801151D0 / &D_800B9A02 taken into pointer LOCALS -> each address is + * force_reg'd once (lui+addiu -> $t2 / $a3) instead of a %lo per use. + * §36 the 24-bit BITFIELD store, not a hand-written mask, is what emits + * 0x00FFFFFF (lui+ori) ahead of 0xFF000000 (lui) while the body ANDs the + * destination first — expmed's store_fixed_bit_field signature. + * §37 asm-label aliases for D_801E770C/D_801E7710: the TU canon is u16/s16 + * but the target does a bare `lbu %lo(sym)`, and a plain block-scope + * `extern u8` would be a conflicting redeclaration. + * --- `volatile` on the OT index read keeps all SIX *pbh loads alive; a plain + * read cse-folds them and the function loses ~25 instructions. + * S1 the whole body is ONE branch-free basic block and every store ties at + * the same priority, so forward asm order == source statement order — + * the POLY_G4 block below is a literal transcription of the target. + * S2 `p` is destructively updated (multi-set -> no birthing boost) so its + * `addiu +8` floats up into the preceding load-delay gap, while `r` is a + * FRESH single-set local (boosted) so its `addiu +0x24` sinks to sit + * immediately before `sb 3($a0)`. Both placements are the target's. + * --- the bare `p = r;` before r's uses is a COMBINE BARRIER: without a SET + * of `p` between `r = p + 9` and r's first use, `can_combine_p` lets + * combine substitute `r` -> `p + 0x24` into every MEM offset and the + * `addiu` disappears entirely (and, at the tail, `p += 2` folds to + * `addiu $t3,$t3,0x2C` off the stale base instead of `addiu $t3,$a0,8`). + * It also fixes the register rotation for free — verified that adding or + * removing `register __asm__` pins on p/r/pbh is a byte no-op. + */ + +/* ---- TU-visible spellings (file scope of ov_SC03_001_jr_8018A3A8.c) ---- */ + +void func_80189EA0(void) { + + extern s32 D_801151D0; + extern u16 D_801E770C; + extern s16 D_801E7710; + /* §100/§120: draft-local, uniquely-named types — they live in the BODY so + * they cannot collide with the TU's own Env_8018BCD4 / PTag_8018BCD4. */ + typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018C960_80189EA0; + typedef struct { u32 *ot; u32 pad[4]; } Env_8018C960_80189EA0; /* 0x14 stride */ + typedef struct { + u32 tag; /* 0x00 */ + u8 r0, g0, b0, code; /* 0x04..0x07 */ + s16 x0, y0; /* 0x08, 0x0A */ + u8 r1, g1, b1, p1; /* 0x0C..0x0F */ + s16 x1, y1; /* 0x10, 0x12 */ + u8 r2, g2, b2, p2; /* 0x14..0x17 */ + s16 x2, y2; /* 0x18, 0x1A */ + u8 r3, g3, b3, p3; /* 0x1C..0x1F */ + s16 x3, y3; /* 0x20, 0x22 */ + } PG4_8018C960_80189EA0; /* -> 0x24 */ + + extern Env_8018C960_80189EA0 D_800AE7BC[]; + extern u8 aD801EF1EC __asm__("D_801E770C"); + extern u8 aD801EF1F0 __asm__("D_801E7710"); + + u32 **pp; + volatile u16 *pbh; + u32 *p; + u32 *r; + u8 c1, c2; + + pp = (u32 **)&D_801151D0; + pbh = (volatile u16 *)&D_800B9A02; + + p = *pp; + ((PTag_8018C960_80189EA0 *)p)->len = 1; + p[1] = 0xE1000015; + ((PTag_8018C960_80189EA0 *)p)->addr = ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; + + p += 2; + ((PG4_8018C960_80189EA0 *)p)->tag = 0x08000000; + ((PG4_8018C960_80189EA0 *)p)->code = 0x3A; + ((PG4_8018C960_80189EA0 *)p)->x2 = -160; + ((PG4_8018C960_80189EA0 *)p)->x0 = -160; + ((PG4_8018C960_80189EA0 *)p)->x3 = 160; + ((PG4_8018C960_80189EA0 *)p)->x1 = 160; + c1 = aD801EF1EC; + ((PG4_8018C960_80189EA0 *)p)->b1 = c1; + ((PG4_8018C960_80189EA0 *)p)->b0 = c1; + ((PG4_8018C960_80189EA0 *)p)->g1 = c1; + ((PG4_8018C960_80189EA0 *)p)->g0 = c1; + ((PG4_8018C960_80189EA0 *)p)->r1 = c1; + ((PG4_8018C960_80189EA0 *)p)->r0 = c1; + c2 = aD801EF1F0; + ((PG4_8018C960_80189EA0 *)p)->y1 = -120; + ((PG4_8018C960_80189EA0 *)p)->b3 = c2; + ((PG4_8018C960_80189EA0 *)p)->b2 = c2; + ((PG4_8018C960_80189EA0 *)p)->g3 = c2; + ((PG4_8018C960_80189EA0 *)p)->g2 = c2; + ((PG4_8018C960_80189EA0 *)p)->r3 = c2; + ((PG4_8018C960_80189EA0 *)p)->r2 = c2; + ((PG4_8018C960_80189EA0 *)p)->y0 = -120; + ((PG4_8018C960_80189EA0 *)p)->y3 = 120; + ((PG4_8018C960_80189EA0 *)p)->y2 = 120; + + ((PTag_8018C960_80189EA0 *)p)->addr = ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; + + r = p + 9; /* 0x24 */ + p = r; /* COMBINE BARRIER — see header */ + ((PTag_8018C960_80189EA0 *)r)->len = 1; + r[1] = 0xE1000240; + ((PTag_8018C960_80189EA0 *)r)->addr = ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_80189EA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)r; + + p += 2; + *pp = p; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018A0B4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018A168); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018A1D0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018A224); + + +/* func_8018A2E0 (ov_SC04_018, ov_SC04_018_jr_8017AE2C) — MATCH (250 ins) + * + * Shadow/marker quad renderer: builds an outer quad (D_801E00B0 offset table) + * through RotNclip4, rejects it on OTZ, builds the inner quad (D_801E0130) + * through RotTransPers4, then emits 4 semi-transparent POLY_G4 (0x24 each) + + * one semi-transparent POLY_F4 (0x18) out of one 0xA8 packet allocation. + * + * Levers that closed the residual (all byte-verified against the .s): + * - frame 0xE0 with locals starting at 0x30: STARTING_FRAME_OFFSET == + * outgoing-args size (RotNclip4 takes 11 args -> 0x2C -> 0x30). `pad0[16]` + * is the DEAD 0x20-byte first local (§136 idiom 6) that puts va at sp+0x50. + * - `sxy[8]` is ONE array: RotNclip4 fills [0..3], RotTransPers4 fills [4..7], + * and the loop indexes the whole thing (idx values run 0..7). + * - `register u16 *dst __asm__("$4")`: a HARD-reg dst is not a biv, so loop.c + * cannot strength-reduce its +2/+4 accesses into a second IV. That is what + * gives ONE register with offsets 0/2/4 (unpinned -> 254 ins, extra IV). + * - `p2 = p1 + 2` (two walked source pointers): `p1[0]` is a bare deref + * (excluded from givs, loop-map L1 rule 4) so p1 stays the biv used at + * offset 0, and p2 is the second IV carrying the -2/0 offset cluster. + * - `while` loops with `i++` written BEFORE the pointer bumps: the increment + * LUID order decides which bump fills the first load-delay slot. + * - `s16 idx[4]` as a real ARRAY (ARRAY_REF => MEM_IN_STRUCT_P): that makes + * the varying-address packet store conflict with the stack slots, so CSE + * cannot forward idx[1..3] and gcc re-loads them with `lh` (an + * INDIRECT_REF `*(s16*)(buf+0x82)` forwards them and loses the reloads). + * - `D_800A651C[][5]` / `D_801E01Dx[][4]` two-dimensional externs: the 1-D + * `sym + byte_offset` spelling makes gcc materialise `&D_800A651C` into a + * hoisted callee-saved register ($s5, +4 ins); the 2-D array-ref keeps the + * symbol folded in the MEM address (gas `lw $2,sym($1)` macro) and makes the + * table index a REDUCED GIV, whose preheader init lands AFTER the hoisted + * `addiu $s3,$sp,0x30` movable (target order s3 -> s2 -> s0). + * - `type2 = type + zr` ($zero pin): the target keeps TWO pseudos for + * (attr & 0xFF) — $a0 for the pre-call use and $s1 for the post-call one — + * so a plain second variable would be propagated away by CSE. + * - `pk[7] = 0x3A` written AFTER the 0x1C colour store: it only conflicts with + * the 0x04 store, so the scheduler sinks it into the `lh 0xB6($sp)` delay + * slot exactly as in the target (§135 idiom 4, source order sets the sink). + */ + +extern void func_8012E32C(void); +extern void func_8018A6C8(void *, s32); +extern s32 RotNclip4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); +extern s32 RotTransPers4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); +extern void *func_80010A08(s32); +extern s32 AddPrim(s32, void *); +extern void func_8012E28C(s32, s32); + +void func_8018A2E0(u16 *a0, s32 a1) +{ + + extern s32 D_800A651C[][5]; + extern u16 D_801E00B0[]; + extern u16 D_801E0130[]; + extern u16 D_801E01D0[][4]; + extern u16 D_801E01D2[][4]; + extern u16 D_801E01D4[][4]; + extern u16 D_801E01D6[][4]; + register s32 zr __asm__("$0"); + + u16 pad0[16]; /* dead: locals begin at sp+0x30, va must land at sp+0x50 */ + u16 va[16]; /* sp+0x50 — outer quad, 4 x SVECTOR */ + u16 vb[16]; /* sp+0x70 — inner quad, 4 x SVECTOR */ + s32 sxy[8]; /* sp+0x90 — [0..3] RotNclip4, [4..7] RotTransPers4 */ + s16 idx[4]; /* sp+0xB0 */ + s32 p; /* sp+0xB8 */ + s32 otz; /* sp+0xBC */ + s32 flag; /* sp+0xC0 */ + + u16 attr; + s32 type; + s32 type2; + u16 *p1; + u16 *p2; + register u16 *dst __asm__("$4"); + s32 i; + u8 *pk; + s32 j; + + func_8012E32C(); + + attr = a0[3]; + type = attr & 0xFF; + type2 = type + zr; + if ((attr & 0xF00) == 0x200) { + func_8018A6C8(a0, a1); + return; + } + + p1 = (u16 *)((u8 *)D_801E00B0 + type * 0x20); + i = 0; + p2 = p1 + 2; + dst = va; + while (i < 4) { + dst[0] = a0[0] + p1[0]; + dst[1] = a0[1] + p2[-1]; + dst[2] = a0[2] + p2[0]; + i++; + p1 += 4; + p2 += 4; + dst += 4; + } + + if (RotNclip4((s32)&va[0], (s32)&va[4], (s32)&va[8], (s32)&va[12], + &sxy[0], &sxy[1], &sxy[2], &sxy[3], &p, &otz, &flag) <= 0) { + return; + } + + otz -= 0x10; + if (otz < 0) { + return; + } + if (otz >= 0x1000) { + return; + } + + p1 = (u16 *)((u8 *)D_801E0130 + type2 * 0x20); + i = 0; + p2 = p1 + 2; + dst = vb; + while (i < 4) { + dst[0] = a0[0] + p1[0]; + dst[1] = a0[1] + p2[-1]; + dst[2] = a0[2] + p2[0]; + i++; + p1 += 4; + p2 += 4; + dst += 4; + } + + RotTransPers4((s32)&vb[0], (s32)&vb[4], (s32)&vb[8], (s32)&vb[12], + &sxy[4], &sxy[5], &sxy[6], &sxy[7], &p, &flag); + + pk = func_80010A08(0xA8); + + for (j = 0; j < 4; j++) { + idx[0] = D_801E01D0[j][0]; + idx[1] = D_801E01D2[j][0]; + idx[2] = D_801E01D4[j][0]; + idx[3] = D_801E01D6[j][0]; + *(s32 *)(pk + 0x4) = a1 & -(idx[0] < 4); + *(s32 *)(pk + 0xC) = a1 & -(idx[1] < 4); + *(s32 *)(pk + 0x14) = a1 & -(idx[2] < 4); + *(s32 *)(pk + 0x1C) = a1 & -(idx[3] < 4); + pk[7] = 0x3A; + *(u32 *)(pk + 0x0) = 0x08000000; + *(s32 *)(pk + 0x8) = sxy[idx[0]]; + *(s32 *)(pk + 0x10) = sxy[idx[1]]; + *(s32 *)(pk + 0x18) = sxy[idx[2]]; + *(s32 *)(pk + 0x20) = sxy[idx[3]]; + AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); + pk += 0x24; + } + + *(s32 *)(pk + 0x4) = a1; + pk[7] = 0x2A; + *(u32 *)(pk + 0x0) = 0x05000000; + *(s32 *)(pk + 0x8) = sxy[0]; + *(s32 *)(pk + 0xC) = sxy[1]; + *(s32 *)(pk + 0x10) = sxy[2]; + *(s32 *)(pk + 0x14) = sxy[3]; + AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); + func_8012E28C(otz, 1); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018A6C8); + +DEFINE_func_8018A740() /* dedup: shared engine-core @0x8018A740 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018A77C); + +DEFINE_func_8018A898() /* dedup: shared engine-core @0x8018A898 (src/shared) */ + + +extern void (*D_801E0524[])(void); + +void func_8018A8D4(void *a0) { + D_801E0524[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E0534[])(void); + +void func_8018A910(void *a0) { + D_801E0534[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E0544[])(void); + +void func_8018A94C(void *a0) { + D_801E0544[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8018A988() /* dedup: shared engine-core @0x8018A988 (src/shared) */ + + +extern s32 func_8012BEE8(s32 a0); +extern s32 rand(void); + +void func_8018A990(s32 param_1) { + s32 uVar1; + s32 iVar2; + register s32 iVar3 __asm__("$3"); + register s32 iVar4 __asm__("$16"); + u32 uVar3; + + uVar1 = *(u16 *)(param_1 + 0x34); + if (uVar1 == 1) { + goto case1; + } + if (uVar1 < 2) { + if (uVar1 == 0) { + goto case0; + } + return; + } + if (uVar1 == 2) { + goto case2; + } + if (uVar1 != 3) { + return; + } + goto case3; + +case0: + iVar2 = func_8012BEE8(param_1); + if (iVar2 == 0) { + return; + } + *(s32 *)(param_1 + 0x1c) = 0x40; + *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; + uVar3 = rand(); + iVar4 = uVar3 & 0x3fff; + iVar4 = iVar4 + 0x7800; + uVar3 = rand(); + if ((uVar3 & 1) == 0) { + iVar4 = -iVar4; + } + *(s32 *)(param_1 + 0xe0) = iVar4; + *(s32 *)(param_1 + 0xe4) = 0; + return; + +case1: + iVar3 = *(s32 *)(param_1 + 0xe4); + iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); + *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; + *(s32 *)(param_1 + 0xe4) = iVar3; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); + iVar2 = func_8012BEE8(param_1); + if (iVar2 == 0) { + return; + } + *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; + uVar3 = rand(); + uVar3 = uVar3 & 0x3f; + goto tail; + +case2: + *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + *(s32 *)(param_1 + 0xe4); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); + iVar2 = func_8012BEE8(param_1); + if (iVar2 == 0) { + return; + } + *(s32 *)(param_1 + 0x1c) = 0x40; + *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; + *(s32 *)(param_1 + 0xe0) = -*(s32 *)(param_1 + 0xe0); + return; + +case3: + __asm__ __volatile__("" ::: "memory"); + iVar3 = *(s32 *)(param_1 + 0xe4); + iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); + *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; + *(s32 *)(param_1 + 0xe4) = iVar3; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); + iVar2 = func_8012BEE8(param_1); + if (iVar2 == 0) { + return; + } + *(u16 *)(param_1 + 0x34) = 0; + uVar3 = rand(); + uVar3 = uVar3 & 0xff; + +tail: + *(u32 *)(param_1 + 0x1c) = uVar3 + 0x40; +} + + +DEFINE_func_8018AB3C() /* dedup: shared engine-core @0x8018AB3C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018AB78); + + +extern s32 D_801E01F0; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018ACD4(void) { + D_801E7980 = &D_801E01F0; + func_8018A168(0x474, 0x4B0); +} + + + +extern s32 D_801E0228; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AD08(void) { + D_801E7980 = &D_801E0228; + func_8018A168(0x474, 0x4EC); +} + + + +extern s32 D_801E0260; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AD3C(void) { + D_801E7980 = &D_801E0260; + func_8018A168(0x474, 0x4B0); +} + + + +extern s32 D_801E0288; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AD70(void) { + D_801E7980 = &D_801E0288; + func_8018A168(0x474, 0x4B0); +} + + + +extern s32 D_801E02C0; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018ADA4(void) { + D_801E7980 = &D_801E02C0; + func_8018A168(0x474, 0x528); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018ADD8); + + +extern s32 D_801E0338; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AE4C(void) { + D_801E7980 = &D_801E0338; + func_8018A168(0x474, 0x1A4); +} + + + + +extern s32 func_80029504(void); +extern void func_8018A168(s32 arg0, s32 arg1); + +s32 func_8018AE80(void) { + + extern s32 D_801E0370; + s32 v; + D_801E7980 = (s32)&D_801E0370; + v = func_80029504(); + if ((u32)(v - 0x64) < 0x1F4) { + return -1; + } + func_8018A168(0x96, 0xF0); +} + + + +extern s32 D_801E0390; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AECC(void) { + D_801E7980 = &D_801E0390; + func_8018A168(0x12c, 0x1A4); +} + + +DEFINE_func_8018AF00() /* dedup: shared engine-core @0x8018AF00 (src/shared) */ + + +extern s32 D_801E0440; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AF34(void) { + D_801E7980 = &D_801E0440; + func_8018A168(0x474, 0x4B0); +} + + + + +extern s32 func_80029504(void); +extern void func_8018A168(s32 arg0, s32 arg1); + +s32 func_8018AF68(void) { + + extern s32 D_801E0470; + s32 v; + D_801E7980 = (s32)&D_801E0470; + v = func_80029504(); + if ((u32)(v - 0x64) < 0x1F4) { + return -1; + } + func_8018A168(0x474, 0x78); +} + + + +extern s32 D_801E0488; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AFB4(void) { + D_801E7980 = &D_801E0488; + func_8018A168(0x564, 0x1A4); +} + + +DEFINE_func_8018AFE8() /* dedup: shared engine-core @0x8018AFE8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018AFF0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B0AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B158); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B19C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B2B8); + + +extern void func_8012B414(int a0); + void func_8018B354(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(temp_v1 + 0x14) += 0x8; + ((void (*)(void))func_8012B414)(); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B388); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B400); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B448); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B4EC); + +DEFINE_func_8018B564() /* dedup: shared engine-core @0x8018B564 (src/shared) */ + + +extern void (*D_801E056C[])(void); + +void func_8018B570(void *a0) { + D_801E056C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B5AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B614); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B660); + +extern s32 func_8012E57C(s32 a0, s32 a1); + +void func_8018B6A0(void *a0) { + s32 v0; + + v0 = func_8012E57C(0x61, 0xD); + *(s32 *)((char *)a0 + 0xCC) = v0; + v0 = func_8018B5AC(); + + if (v0 != 0) { + v0 = 2; + } else { + v0 = 1; + } + + *(s16 *)((char *)a0 + 0x2) = v0; +} + + +DEFINE_func_8018B6E8() /* dedup: shared engine-core @0x8018B6E8 (src/shared) */ + + + +extern void (*D_801E0580[])(void); + +void func_8018B6F4(void *a0) { + D_801E0580[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B730); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B798); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B7FC); + +DEFINE_func_8018B868() /* dedup: shared engine-core @0x8018B868 (src/shared) */ + + + +extern void (*D_801E0594[])(void); + +void func_8018B874(void *a0) { + D_801E0594[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B8B0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B904); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B948); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B988); + +DEFINE_func_8018B9D0() /* dedup: shared engine-core @0x8018B9D0 (src/shared) */ + + +extern void (*D_801E05A8[])(void); + +void func_8018B9DC(void *a0) { + D_801E05A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BA18); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BA80); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BAE4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BB50); + + +extern void (*D_801E05B4[])(void); + +void func_8018BC3C(void *a0) { + D_801E05B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BC78); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BCDC); + + +extern void (*D_801E05BC[])(void); + +void func_8018BD58(void *a0) { + D_801E05BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8018BD94(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BDA4); + + +extern void func_80184CB8(s32*, s32); + extern short D_801E05C4; + void func_8018BDE0(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_801E05C4); + } + + + +extern void func_80184CB8(s32*, s32); + extern short D_801E05C4; + void func_8018BE0C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 3; + ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_801E05C4); + } + + + +extern void (*D_801E0690[])(void); + +void func_8018BE38(void *a0) { + D_801E0690[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BE74); + +extern s32 func_8014CB1C(void); + s32 func_8018BEE8(void) { + return func_8014CB1C() != 0; + } + + +DEFINE_func_8018BF08() /* dedup: shared engine-core @0x8018BF08 (src/shared) */ + + + + +extern void func_80178CBC(s32, s32); + extern short D_801E0648; + void func_8018BF34(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(short *)((char *)a0 + 0x34) = 0; + ((void (*)(s32 *, s32))func_80178CBC)((s32 *)a0, (s32)&D_801E0648); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BF64); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BFCC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C038); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C0B0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C114); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C1E0); + + +extern void func_80184CB8(s32*, s32); + extern short D_801E06A8; + void func_8018C24C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_801E06A8); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C278); + + +extern void (*D_801E077C[])(void); + +void func_8018C368(void *a0) { + D_801E077C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801E070C; + void func_8018C3A4(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801E070C); + } + + +extern s32 func_800D0EC4(); +s32 func_8018C3D0(void) { + return func_800D0EC4() == 0; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C3F0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C494); + + +extern s32 func_80029504(void); +extern s32 func_80184D00(void); +extern s32 func_80184E44(void); +extern s32 func_80184BAC(s32 arg0, s32 arg1); +extern void func_80184CB8(s32*, s32); + +void func_8018C518(void *a0) { + + extern short D_801E06A8; + void *s0 = a0; + s32 v1 = func_80029504(); + s32 v0; + + if (v1 < 0xC8) { + v0 = func_80184D00(); + v1 = 3; + if (v0 == v1) { + return; + } + v0 = func_80184BAC(0xA, 0x10); + if (v0 == 0) { + return; + } + v0 = 1; + } else if (v1 < 0x258) { + v0 = 1; + } else if (v1 < 0x384) { + v0 = func_80184BAC(0xA, 0x10); + if (v0 == 0) { + return; + } + v0 = 1; + } else { + v0 = func_80184E44(); + v1 = 1; + if (v0 == v1) { + return; + } + v0 = func_80184BAC(0xA, 0x10); + if (v0 == 0) { + return; + } + v0 = 1; + } + + *(s16 *)((char *)s0 + 0x2) = 0x1; + ((void (*)(s32, s32))func_80184CB8)((s32)s0, (s32)&D_801E06A8); +} + + + +extern int func_80178970(void); +extern void func_80178D18(void); +extern void func_80184CB8(s32*, s32); + +void func_8018C5AC(void * arg0) { + + extern short D_801E06A8; + if (func_80178970() != 0) { + ((void (*)(s32))func_80178D18)((s32)arg0); + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_801E06A8); + } +} + + + +extern void (*D_801E3AF4[])(void); + +void func_8018C5FC(void *a0) { + D_801E3AF4[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +/* Declarations conformed to the TU (ov_SC04_018_jr_8017AE2C.c) — lever (A): + * func_8012A828 : TU declares `extern void func_8012A828(s32*, s32);` + * at L3460 / L4615 / L5083 / L5372 / L5859 / L6004 / L6155 / + * L6479 / L6504 / L6529. The draft's `(s32, s32)` form caused + * the 7697-vs-6529 conflict. Conformed here; the type + * disagreement is pushed to a cast at the call site. + * D_8018D540 : TU declares `extern u8 D_8018D540[];` (block scope, L3467). + * Conformed; `(s32)D_8018D540` == `(s32)&D_8018D540`. + * func_801788B8 : verbatim from TU L2532 / L7756 (below the splice point). + * func_8012C354, D_801E39E0, func_8018C730, func_8018C638 : no other + * declaration anywhere in the TU (func_8018C730 / func_8018C638 + * appear only as INCLUDE_ASM, which emits no C declaration). + * + * Body: the original draft was NOT byte-correct. `*(u16 *)(x + 2) = 1;` must be + * sequenced BEFORE the func_8012A828 call, not after it — with it after, gcc + * coalesces the store base onto $a0 (`sh v0,2(a0)`) and re-emits the arg copy, + * giving a 6-instruction ADDRESSING/cse diff. Moved above the call; both stores + * now retire off $s0 and the sh lands in the jal delay slot, as in the target. */ + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8012A828(s32*, s32); +extern s32 func_801788B8(s32 arg0, s32 arg1); + +extern void func_8018C730(void); + +void func_8018C638(s32 a0) { + + extern M2C_UNK D_801E39E0; + extern u8 D_8018D540[]; + s32 s0 = a0; + if (func_8012C354(a0, (s32)&D_801E39E0)) { + *(u8 *)(s0 + 0xC0) = 1; + *(u16 *)(s0 + 0x2) = 1; + func_8012A828((s32 *)s0, (s32)D_8018D540); + func_801788B8(s0, (s32)func_8018C730); + } +} + + +DEFINE_func_8018C69C() /* dedup: shared engine-core @0x8018C69C (src/shared) */ + + +extern void func_80178CBC(s32, s32); + +void func_8018C6A4(s32 *a0) +{ + + extern signed char D_801E3AD0[]; + s32 v0; + + v0 = *(s16 *)((s32)a0 + 0x70); + v0 = v0 * 4; + ((void (*)(s32 *, s32))func_80178CBC)(a0, *(s32 *)((s32)D_801E3AD0 + v0)); + *(s16 *)((s32)a0 + 0x2) = 0x3; +} + + + +extern int func_80178970(void); +extern void func_80178D18(void); + +void func_8018C6F0(s32 a0) { + if (func_80178970() != 0) { + ((void (*)(s32))func_80178D18)(a0); + *(s16 *)(a0 + 2) = 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C730); + + +extern void (*D_801E3BA4[])(void); + +void func_8018C78C(void *a0) { + D_801E3BA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C7C8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C7F0); + + + +s32 func_8018C8A8(void) +{ + + extern u16 D_80126B5E; + extern u16 D_80126B66; + extern u16 D_80126B62; + s16 v1; + s32 result; + + v1 = *(s16 *)&D_80126B5E; + if (v1 < 0x400) { + result = 0; + } else if (v1 >= 0x501) { + result = 0; + } else { + v1 = *(s16 *)&D_80126B66; + if (v1 < 0x580) { + result = 0; + } else if (v1 >= 0x601) { + result = 0; + } else { + v1 = *(s16 *)&D_80126B62; + result = (v1 >= -0x200); + } + } + return result; +} + + +extern void func_8012B2CC(s32 arg); + void func_8018C90C(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 2; + *(s16 *)(v1 + 0x12) = -0x600; + func_8012B2CC((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018C93C); + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_80029504(void); +extern s32 func_80029178(s32 arg); +extern void func_8018CB18(void); + +void func_8018C96C(void *arg0) { + + extern u8 D_801DE040[]; + extern u8 D_801DE130[]; + extern u8 D_801E3BAC[]; + extern u8 D_801E3BBC[]; + s32 v0; + s32 t; + s32 *p; + + v0 = ((s32 (*)(void *))func_8012C1B8)(arg0); + *(s32 *)((char *)arg0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(arg0); + } else { + func_8001C214(v0, *(s16 *)((char *)arg0 + 0x70) == 0 ? (s32)&D_801DE040[0] : (s32)&D_801DE130[0]); + *(s16 *)((char *)arg0 + 0x5C) = 0x800; + *(s32 *)((char *)arg0 + 0x58) = + (s32)&D_801E3BBC[*(s16 *)((char *)arg0 + 0x70) * 0x10] | 0x40000000; + func_8012E8E0((s32)arg0, (s32)&D_801E3BAC[*(s16 *)((char *)arg0 + 0x70) * 8]); + *(s16 *)(*(s32 *)((char *)arg0 + 0x68) + 0xC) = 0x7FFF; + t = func_80029504(); + if ((func_80029178(0xF6) & 0xFF) == 0 && t < 0xE6) { + if (*(s16 *)((char *)arg0 + 0x70) == 0) { + *(s16 *)((char *)arg0 + 0x2) = 1; + *(s16 *)((char *)arg0 + 0x34) = 0; + func_801788B8((s32)arg0, (s32)func_8018CB18); + } else { + s32 *q = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 3; + *(s16 *)((char *)arg0 + 0x34) = 0; + *(s16 *)((char *)q + 0x12) = 0; + *(s32 *)((char *)arg0 + 0x1C) = 0x30; + } + } else { + if (*(s16 *)((char *)arg0 + 0x70) == 0) { + p = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 2; + *(s16 *)((char *)p + 0x12) = -0x600; + func_8012B2CC((s32)arg0); + } else { + p = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 4; + *(s16 *)((char *)p + 0x12) = 0x600; + func_8012B2CC((s32)arg0); + } + } + } +} + + + +extern void (*D_801E3CEC[])(void); + +void func_8018CADC(void *a0) { + D_801E3CEC[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +/* func_8018CB18 — state-2 gate for the SC04_018 actor state machine. + * + * Reads the actor's linked object (a0->0x64), requires its state word (+0x2) == 1 + * and the actor's own +0x34 flag clear, then asks func_8018C8A8() for permission; + * on success it stamps 1 into the linked object's +0x34, pokes func_80178BF8() and + * returns the address of the next callback (func_80172710). + * + * DECL SURFACE (§73 / §37): the TU already carries a fleet-canonical forward decl + * `extern void func_8018CB18(void);` (ov_SC04_018_jr_8017AE2C.c L7759) + * used only to take the function's ADDRESS at L7786. The byte-true signature + * disagrees on BOTH §73 axes (return void->s32 AND params void->void*), so neither + * the fleet widen nor a cast-at-use fixes it. Instead the definition is emitted + * under the C identifier `aF8018CB18` with an __asm__("func_8018CB18") label + * (§37 asm-label alias, the proven function-definition form — cf. + * src/ov_SC03_099/ov_SC03_099_after.c L533). The C-level name never collides with + * the canonical decl, the emitted symbol is unchanged, and codegen is byte-identical + * (verified: match_one MATCH 31/31 with and without the alias). + * + * ORACLE: .venv/bin/python tools/match_one.py func_8018CB18 \ + * --c .run/s7/ov_SC04_018/func_8018CB18.c \ + * --asm-subdir asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C -> MATCH (31 ins) + */ + +extern s32 func_8018C8A8(void); +extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2539) */ +extern void func_80172710(void); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2231) */ + +s32 aF8018CB18(void *a0) __asm__("func_8018CB18"); + +s32 aF8018CB18(void *a0) +{ + if (*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) != 1) { + return 0; + } + if (*(u16 *)((s32)a0 + 0x34) != 0) { + return 0; + } + if (func_8018C8A8() == 0) { + return 0; + } + *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x34) = 1; + func_80178BF8(); + return (s32)func_80172710; +} + + +extern void func_80029124(s32, s32); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_800D0F4C(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); + + +void func_8018CB94(void *a0) +{ + s32 result; + + *(u16 *)((s32)a0 + 0x34) = *(u16 *)((s32)a0 + 0x34) + 1; + + func_8002D4C8(0x7A0, 0); + func_80029124(0xF6, 1); + func_800D0F4C(0x59); + + result = func_8012E57C(0x1F2, 1); + + if (result) { + *(u16 *)(result + 0x34) = *(u16 *)(result + 0x34) + 1; + } +} + + + + + +s32 func_8018CC04(void) { + /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every + LATER function in this TU, which blocks a byte-true decl of a different type. + Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ + extern s32 D_801E79A0; + return !(D_801E79A0 ^ 2); +} + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8018CC1C(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018CC40); + + +extern s32 func_8012BEE8(s32 a0); +extern void func_8018C93C(void *a0); + +void func_8018CD74(void *a0) { + u16 v1; + + v1 = *(u16 *)((char *)a0 + 0x34); + if (v1 == 0) { + return; + } + if (v1 != 1) { + return; + } + { + u16 *p = (u16 *)*(s32 *)((char *)a0 + 0x20); + + *(u16 *)((char *)p + 0x12) = *(u16 *)((char *)p + 0x12) + 0x20; + if (((s32 (*)(void))func_8012BEE8)()) { + func_8018C93C(a0); + } + } +} + + +DEFINE_func_8018CDDC() /* dedup: shared engine-core @0x8018CDDC (src/shared) */ + +DEFINE_func_8018CDE4() /* dedup: shared engine-core @0x8018CDE4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018CDEC); + + + + + + diff --git a/src/ov_SC05_017/ov_SC05_017_jr_801875E8.c b/src/ov_SC05_017/ov_SC05_017_jr_801875E8.c index 89144375b9..70945f9c8b 100644 --- a/src/ov_SC05_017/ov_SC05_017_jr_801875E8.c +++ b/src/ov_SC05_017/ov_SC05_017_jr_801875E8.c @@ -3630,1410 +3630,3 @@ s32 *func_801886B8(s32 *ot, Panel_8017E978_801886B8 *w0, s16 idx) { INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80188884); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80188B1C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80188F14); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80189240); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80189ADC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80189B14); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80189B54); - - -/* func_80189BA0 — ov_SC03_001 (133 ins), exemplar of a 5-member open-only - * h_norm cluster. Builds the full-screen fade overlay: a DR_MODE-style 8-byte - * GP0 packet (0xE1000015), a 320x240 semi-transparent gouraud quad (POLY_G4, - * code 0x3A), and a second 8-byte GP0 packet (0xE1000240), each linked into the - * current OT with the psyq `addPrim` idiom. The type shapes and the - * `((PTag *)x)->addr = ((PTag *)ot)->addr; ((PTag *)ot)->addr = (u32)x;` pair - * are copied VERBATIM from the already-matched neighbour func_8018BCD4 in this - * same TU (§71) — Env_* / PTag_* there are the fleet-canonical shapes. - * - * Levers that were load-bearing (all byte-tested; the draft is PIN-FREE): - * §20 &D_801151D0 / &D_800B9A02 taken into pointer LOCALS -> each address is - * force_reg'd once (lui+addiu -> $t2 / $a3) instead of a %lo per use. - * §36 the 24-bit BITFIELD store, not a hand-written mask, is what emits - * 0x00FFFFFF (lui+ori) ahead of 0xFF000000 (lui) while the body ANDs the - * destination first — expmed's store_fixed_bit_field signature. - * §37 asm-label aliases for D_801ED56C/D_801ED570: the TU canon is u16/s16 - * but the target does a bare `lbu %lo(sym)`, and a plain block-scope - * `extern u8` would be a conflicting redeclaration. - * --- `volatile` on the OT index read keeps all SIX *pbh loads alive; a plain - * read cse-folds them and the function loses ~25 instructions. - * S1 the whole body is ONE branch-free basic block and every store ties at - * the same priority, so forward asm order == source statement order — - * the POLY_G4 block below is a literal transcription of the target. - * S2 `p` is destructively updated (multi-set -> no birthing boost) so its - * `addiu +8` floats up into the preceding load-delay gap, while `r` is a - * FRESH single-set local (boosted) so its `addiu +0x24` sinks to sit - * immediately before `sb 3($a0)`. Both placements are the target's. - * --- the bare `p = r;` before r's uses is a COMBINE BARRIER: without a SET - * of `p` between `r = p + 9` and r's first use, `can_combine_p` lets - * combine substitute `r` -> `p + 0x24` into every MEM offset and the - * `addiu` disappears entirely (and, at the tail, `p += 2` folds to - * `addiu $t3,$t3,0x2C` off the stale base instead of `addiu $t3,$a0,8`). - * It also fixes the register rotation for free — verified that adding or - * removing `register __asm__` pins on p/r/pbh is a byte no-op. - */ - -/* ---- TU-visible spellings (file scope of ov_SC03_001_jr_8018A3A8.c) ---- */ - -void func_80189BA0(void) { - - extern s32 D_801151D0; - extern u16 D_801ED56C; - extern s16 D_801ED570; - /* §100/§120: draft-local, uniquely-named types — they live in the BODY so - * they cannot collide with the TU's own Env_8018BCD4 / PTag_8018BCD4. */ - typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018C960_80189BA0; - typedef struct { u32 *ot; u32 pad[4]; } Env_8018C960_80189BA0; /* 0x14 stride */ - typedef struct { - u32 tag; /* 0x00 */ - u8 r0, g0, b0, code; /* 0x04..0x07 */ - s16 x0, y0; /* 0x08, 0x0A */ - u8 r1, g1, b1, p1; /* 0x0C..0x0F */ - s16 x1, y1; /* 0x10, 0x12 */ - u8 r2, g2, b2, p2; /* 0x14..0x17 */ - s16 x2, y2; /* 0x18, 0x1A */ - u8 r3, g3, b3, p3; /* 0x1C..0x1F */ - s16 x3, y3; /* 0x20, 0x22 */ - } PG4_8018C960_80189BA0; /* -> 0x24 */ - - extern Env_8018C960_80189BA0 D_800AE7BC[]; - extern u8 aD801EF1EC __asm__("D_801ED56C"); - extern u8 aD801EF1F0 __asm__("D_801ED570"); - - u32 **pp; - volatile u16 *pbh; - u32 *p; - u32 *r; - u8 c1, c2; - - pp = (u32 **)&D_801151D0; - pbh = (volatile u16 *)&D_800B9A02; - - p = *pp; - ((PTag_8018C960_80189BA0 *)p)->len = 1; - p[1] = 0xE1000015; - ((PTag_8018C960_80189BA0 *)p)->addr = ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; - - p += 2; - ((PG4_8018C960_80189BA0 *)p)->tag = 0x08000000; - ((PG4_8018C960_80189BA0 *)p)->code = 0x3A; - ((PG4_8018C960_80189BA0 *)p)->x2 = -160; - ((PG4_8018C960_80189BA0 *)p)->x0 = -160; - ((PG4_8018C960_80189BA0 *)p)->x3 = 160; - ((PG4_8018C960_80189BA0 *)p)->x1 = 160; - c1 = aD801EF1EC; - ((PG4_8018C960_80189BA0 *)p)->b1 = c1; - ((PG4_8018C960_80189BA0 *)p)->b0 = c1; - ((PG4_8018C960_80189BA0 *)p)->g1 = c1; - ((PG4_8018C960_80189BA0 *)p)->g0 = c1; - ((PG4_8018C960_80189BA0 *)p)->r1 = c1; - ((PG4_8018C960_80189BA0 *)p)->r0 = c1; - c2 = aD801EF1F0; - ((PG4_8018C960_80189BA0 *)p)->y1 = -120; - ((PG4_8018C960_80189BA0 *)p)->b3 = c2; - ((PG4_8018C960_80189BA0 *)p)->b2 = c2; - ((PG4_8018C960_80189BA0 *)p)->g3 = c2; - ((PG4_8018C960_80189BA0 *)p)->g2 = c2; - ((PG4_8018C960_80189BA0 *)p)->r3 = c2; - ((PG4_8018C960_80189BA0 *)p)->r2 = c2; - ((PG4_8018C960_80189BA0 *)p)->y0 = -120; - ((PG4_8018C960_80189BA0 *)p)->y3 = 120; - ((PG4_8018C960_80189BA0 *)p)->y2 = 120; - - ((PTag_8018C960_80189BA0 *)p)->addr = ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; - - r = p + 9; /* 0x24 */ - p = r; /* COMBINE BARRIER — see header */ - ((PTag_8018C960_80189BA0 *)r)->len = 1; - r[1] = 0xE1000240; - ((PTag_8018C960_80189BA0 *)r)->addr = ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr; - ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)r; - - p += 2; - *pp = p; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80189DB4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80189E68); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80189ED0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_80189F24); - - -/* func_80189FE0 (ov_SC04_018, ov_SC04_018_jr_8017AE2C) — MATCH (250 ins) - * - * Shadow/marker quad renderer: builds an outer quad (D_801E6370 offset table) - * through RotNclip4, rejects it on OTZ, builds the inner quad (D_801E63F0) - * through RotTransPers4, then emits 4 semi-transparent POLY_G4 (0x24 each) + - * one semi-transparent POLY_F4 (0x18) out of one 0xA8 packet allocation. - * - * Levers that closed the residual (all byte-verified against the .s): - * - frame 0xE0 with locals starting at 0x30: STARTING_FRAME_OFFSET == - * outgoing-args size (RotNclip4 takes 11 args -> 0x2C -> 0x30). `pad0[16]` - * is the DEAD 0x20-byte first local (§136 idiom 6) that puts va at sp+0x50. - * - `sxy[8]` is ONE array: RotNclip4 fills [0..3], RotTransPers4 fills [4..7], - * and the loop indexes the whole thing (idx values run 0..7). - * - `register u16 *dst __asm__("$4")`: a HARD-reg dst is not a biv, so loop.c - * cannot strength-reduce its +2/+4 accesses into a second IV. That is what - * gives ONE register with offsets 0/2/4 (unpinned -> 254 ins, extra IV). - * - `p2 = p1 + 2` (two walked source pointers): `p1[0]` is a bare deref - * (excluded from givs, loop-map L1 rule 4) so p1 stays the biv used at - * offset 0, and p2 is the second IV carrying the -2/0 offset cluster. - * - `while` loops with `i++` written BEFORE the pointer bumps: the increment - * LUID order decides which bump fills the first load-delay slot. - * - `s16 idx[4]` as a real ARRAY (ARRAY_REF => MEM_IN_STRUCT_P): that makes - * the varying-address packet store conflict with the stack slots, so CSE - * cannot forward idx[1..3] and gcc re-loads them with `lh` (an - * INDIRECT_REF `*(s16*)(buf+0x82)` forwards them and loses the reloads). - * - `D_800A651C[][5]` / `D_801E01Dx[][4]` two-dimensional externs: the 1-D - * `sym + byte_offset` spelling makes gcc materialise `&D_800A651C` into a - * hoisted callee-saved register ($s5, +4 ins); the 2-D array-ref keeps the - * symbol folded in the MEM address (gas `lw $2,sym($1)` macro) and makes the - * table index a REDUCED GIV, whose preheader init lands AFTER the hoisted - * `addiu $s3,$sp,0x30` movable (target order s3 -> s2 -> s0). - * - `type2 = type + zr` ($zero pin): the target keeps TWO pseudos for - * (attr & 0xFF) — $a0 for the pre-call use and $s1 for the post-call one — - * so a plain second variable would be propagated away by CSE. - * - `pk[7] = 0x3A` written AFTER the 0x1C colour store: it only conflicts with - * the 0x04 store, so the scheduler sinks it into the `lh 0xB6($sp)` delay - * slot exactly as in the target (§135 idiom 4, source order sets the sink). - */ - -extern void func_8012E32C(void); -extern void func_8018A3C8(void *, s32); -extern s32 RotNclip4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); -extern s32 RotTransPers4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); -extern void *func_80010A08(s32); -extern s32 AddPrim(s32, void *); -extern void func_8012E28C(s32, s32); - -void func_80189FE0(u16 *a0, s32 a1) -{ - - extern s32 D_800A651C[][5]; - extern u16 D_801E6370[]; - extern u16 D_801E63F0[]; - extern u16 D_801E6490[][4]; - extern u16 D_801E6492[][4]; - extern u16 D_801E6494[][4]; - extern u16 D_801E6496[][4]; - register s32 zr __asm__("$0"); - - u16 pad0[16]; /* dead: locals begin at sp+0x30, va must land at sp+0x50 */ - u16 va[16]; /* sp+0x50 — outer quad, 4 x SVECTOR */ - u16 vb[16]; /* sp+0x70 — inner quad, 4 x SVECTOR */ - s32 sxy[8]; /* sp+0x90 — [0..3] RotNclip4, [4..7] RotTransPers4 */ - s16 idx[4]; /* sp+0xB0 */ - s32 p; /* sp+0xB8 */ - s32 otz; /* sp+0xBC */ - s32 flag; /* sp+0xC0 */ - - u16 attr; - s32 type; - s32 type2; - u16 *p1; - u16 *p2; - register u16 *dst __asm__("$4"); - s32 i; - u8 *pk; - s32 j; - - func_8012E32C(); - - attr = a0[3]; - type = attr & 0xFF; - type2 = type + zr; - if ((attr & 0xF00) == 0x200) { - func_8018A3C8(a0, a1); - return; - } - - p1 = (u16 *)((u8 *)D_801E6370 + type * 0x20); - i = 0; - p2 = p1 + 2; - dst = va; - while (i < 4) { - dst[0] = a0[0] + p1[0]; - dst[1] = a0[1] + p2[-1]; - dst[2] = a0[2] + p2[0]; - i++; - p1 += 4; - p2 += 4; - dst += 4; - } - - if (RotNclip4((s32)&va[0], (s32)&va[4], (s32)&va[8], (s32)&va[12], - &sxy[0], &sxy[1], &sxy[2], &sxy[3], &p, &otz, &flag) <= 0) { - return; - } - - otz -= 0x10; - if (otz < 0) { - return; - } - if (otz >= 0x1000) { - return; - } - - p1 = (u16 *)((u8 *)D_801E63F0 + type2 * 0x20); - i = 0; - p2 = p1 + 2; - dst = vb; - while (i < 4) { - dst[0] = a0[0] + p1[0]; - dst[1] = a0[1] + p2[-1]; - dst[2] = a0[2] + p2[0]; - i++; - p1 += 4; - p2 += 4; - dst += 4; - } - - RotTransPers4((s32)&vb[0], (s32)&vb[4], (s32)&vb[8], (s32)&vb[12], - &sxy[4], &sxy[5], &sxy[6], &sxy[7], &p, &flag); - - pk = func_80010A08(0xA8); - - for (j = 0; j < 4; j++) { - idx[0] = D_801E6490[j][0]; - idx[1] = D_801E6492[j][0]; - idx[2] = D_801E6494[j][0]; - idx[3] = D_801E6496[j][0]; - *(s32 *)(pk + 0x4) = a1 & -(idx[0] < 4); - *(s32 *)(pk + 0xC) = a1 & -(idx[1] < 4); - *(s32 *)(pk + 0x14) = a1 & -(idx[2] < 4); - *(s32 *)(pk + 0x1C) = a1 & -(idx[3] < 4); - pk[7] = 0x3A; - *(u32 *)(pk + 0x0) = 0x08000000; - *(s32 *)(pk + 0x8) = sxy[idx[0]]; - *(s32 *)(pk + 0x10) = sxy[idx[1]]; - *(s32 *)(pk + 0x18) = sxy[idx[2]]; - *(s32 *)(pk + 0x20) = sxy[idx[3]]; - AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); - pk += 0x24; - } - - *(s32 *)(pk + 0x4) = a1; - pk[7] = 0x2A; - *(u32 *)(pk + 0x0) = 0x05000000; - *(s32 *)(pk + 0x8) = sxy[0]; - *(s32 *)(pk + 0xC) = sxy[1]; - *(s32 *)(pk + 0x10) = sxy[2]; - *(s32 *)(pk + 0x14) = sxy[3]; - AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); - func_8012E28C(otz, 1); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018A3C8); - - -extern void (*D_801E67B0[])(void); - -void func_8018A440(void *a0) { - D_801E67B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018A47C); - - -extern void (*D_801E67DC[])(void); - -void func_8018A598(void *a0) { - D_801E67DC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E67E4[])(void); - -void func_8018A5D4(void *a0) { - D_801E67E4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E67F4[])(void); - -void func_8018A610(void *a0) { - D_801E67F4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E6804[])(void); - -void func_8018A64C(void *a0) { - D_801E6804[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018A688(void) { -} - - -extern s32 func_8012BEE8(s32 a0); -extern s32 rand(void); - -void func_8018A690(s32 param_1) { - s32 uVar1; - s32 iVar2; - register s32 iVar3 __asm__("$3"); - register s32 iVar4 __asm__("$16"); - u32 uVar3; - - uVar1 = *(u16 *)(param_1 + 0x34); - if (uVar1 == 1) { - goto case1; - } - if (uVar1 < 2) { - if (uVar1 == 0) { - goto case0; - } - return; - } - if (uVar1 == 2) { - goto case2; - } - if (uVar1 != 3) { - return; - } - goto case3; - -case0: - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(s32 *)(param_1 + 0x1c) = 0x40; - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - uVar3 = rand(); - iVar4 = uVar3 & 0x3fff; - iVar4 = iVar4 + 0x7800; - uVar3 = rand(); - if ((uVar3 & 1) == 0) { - iVar4 = -iVar4; - } - *(s32 *)(param_1 + 0xe0) = iVar4; - *(s32 *)(param_1 + 0xe4) = 0; - return; - -case1: - iVar3 = *(s32 *)(param_1 + 0xe4); - iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; - *(s32 *)(param_1 + 0xe4) = iVar3; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - uVar3 = rand(); - uVar3 = uVar3 & 0x3f; - goto tail; - -case2: - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + *(s32 *)(param_1 + 0xe4); - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(s32 *)(param_1 + 0x1c) = 0x40; - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - *(s32 *)(param_1 + 0xe0) = -*(s32 *)(param_1 + 0xe0); - return; - -case3: - __asm__ __volatile__("" ::: "memory"); - iVar3 = *(s32 *)(param_1 + 0xe4); - iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; - *(s32 *)(param_1 + 0xe4) = iVar3; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(u16 *)(param_1 + 0x34) = 0; - uVar3 = rand(); - uVar3 = uVar3 & 0xff; - -tail: - *(u32 *)(param_1 + 0x1c) = uVar3 + 0x40; -} - - - -extern void (*D_801E6814[])(void); - -void func_8018A83C(void *a0) { - D_801E6814[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018A878); - -extern s32 D_801E64B0; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018A9D4(void) { - D_801ED7E0 = &D_801E64B0; - func_80189E68(0x474, 0x4B0); -} - - - -extern s32 D_801E64E8; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AA08(void) { - D_801ED7E0 = &D_801E64E8; - func_80189E68(0x474, 0x4EC); -} - - - -extern s32 D_801E6520; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AA3C(void) { - D_801ED7E0 = &D_801E6520; - func_80189E68(0x474, 0x4B0); -} - - - -extern s32 D_801E6548; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AA70(void) { - D_801ED7E0 = &D_801E6548; - func_80189E68(0x474, 0x4B0); -} - - - -extern s32 D_801E6580; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AAA4(void) { - D_801ED7E0 = &D_801E6580; - func_80189E68(0x474, 0x528); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018AAD8); - - -extern s32 D_801E65F8; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AB4C(void) { - D_801ED7E0 = &D_801E65F8; - func_80189E68(0x474, 0x1A4); -} - - - - -extern s32 func_80029504(void); -extern void func_80189E68(s32 arg0, s32 arg1); - -s32 func_8018AB80(void) { - - extern s32 D_801E6630; - s32 v; - D_801ED7E0 = (s32)&D_801E6630; - v = func_80029504(); - if ((u32)(v - 0x64) < 0x1F4) { - return -1; - } - func_80189E68(0x96, 0xF0); -} - - -extern s32 D_801E6650; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018ABCC(void) { - D_801ED7E0 = &D_801E6650; - func_80189E68(0x12C, 0x1A4); -} - - - -extern s32 D_801E66A0; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AC00(void) { - D_801ED7E0 = &D_801E66A0; - func_80189E68(0x474, 0x4B0); -} - - - -extern s32 D_801E6700; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AC34(void) { - D_801ED7E0 = &D_801E6700; - func_80189E68(0x474, 0x4B0); -} - - - - -extern s32 func_80029504(void); -extern void func_80189E68(s32 arg0, s32 arg1); - -s32 func_8018AC68(void) { - - extern s32 D_801E6730; - s32 v; - D_801ED7E0 = (s32)&D_801E6730; - v = func_80029504(); - if ((u32)(v - 0x64) < 0x1F4) { - return -1; - } - func_80189E68(0x474, 0x78); -} - - - -extern s32 D_801E6748; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018ACB4(void) { - D_801ED7E0 = &D_801E6748; - func_80189E68(0x564, 0x1A4); -} - - - -s32 func_8018ACE8(void) { - return -1; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018ACF0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018ADAC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018AE58); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018AE9C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018AFB8); - - -extern void func_8012B414(int a0); - void func_8018B054(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B088); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B100); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B148); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B1EC); - -void func_8018B264(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 2; - } - - - -extern void (*D_801E682C[])(void); - -void func_8018B270(void *a0) { - D_801E682C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B2AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B314); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B360); - -extern s32 func_8012E57C(s32 a0, s32 a1); - -void func_8018B3A0(void *a0) { - s32 v0; - - v0 = func_8012E57C(0x61, 0xD); - *(s32 *)((char *)a0 + 0xCC) = v0; - v0 = func_8018B2AC(); - - if (v0 != 0) { - v0 = 2; - } else { - v0 = 1; - } - - *(s16 *)((char *)a0 + 0x2) = v0; -} - - -void func_8018B3E8(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 2; - } - - - -extern void (*D_801E6840[])(void); - -void func_8018B3F4(void *a0) { - D_801E6840[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B430); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B498); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B4FC); - -void func_8018B568(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 2; - } - - - -extern void (*D_801E6854[])(void); - -void func_8018B574(void *a0) { - D_801E6854[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B5B0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B604); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B648); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B688); - -void func_8018B6D0(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x2; - } - - - -extern void (*D_801E6868[])(void); - -void func_8018B6DC(void *a0) { - D_801E6868[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B718); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B780); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B7E4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B850); - - -extern void (*D_801E6874[])(void); - -void func_8018B93C(void *a0) { - D_801E6874[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B978); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018B9DC); - - -extern void (*D_801E687C[])(void); - -void func_8018BA58(void *a0) { - D_801E687C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8018BA94(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BAA4); - - -extern void func_801849B8(s32*, s32); - extern short D_801E6884; - void func_8018BAE0(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_801849B8)((int)arg0, (int)&D_801E6884); - } - - - -extern void func_801849B8(s32*, s32); - extern short D_801E6884; - void func_8018BB0C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 3; - ((void (*)(s32, s32))func_801849B8)((int)arg0, (int)&D_801E6884); - } - - - -extern void (*D_801E6950[])(void); - -void func_8018BB38(void *a0) { - D_801E6950[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BB74); - -extern s32 func_8014CB1C(void); - s32 func_8018BBE8(void) { - return func_8014CB1C() != 0; - } - - -extern void func_8014B2A8(void); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8018BC08(void) { - func_8014B2A8(); - ((s32 (*)(s32, s32))func_8002D4C8)(0x464, 0); -} - - - - -extern void func_80178CBC(s32, s32); - extern short D_801E6908; - void func_8018BC34(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(short *)((char *)a0 + 0x34) = 0; - ((void (*)(s32 *, s32))func_80178CBC)((s32 *)a0, (s32)&D_801E6908); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BC64); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BCCC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BD38); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BDB0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BE14); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BEE0); - - -extern void func_801849B8(s32*, s32); - extern short D_801E6968; - void func_8018BF4C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_801849B8)((int)arg0, (int)&D_801E6968); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018BF78); - - -extern void (*D_801E6A3C[])(void); - -void func_8018C068(void *a0) { - D_801E6A3C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801E69CC; - void func_8018C0A4(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801E69CC); - } - - -extern s32 func_800D0EC4(); -s32 func_8018C0D0(void) { - return func_800D0EC4() == 0; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018C0F0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018C194); - - -extern s32 func_80029504(void); -extern s32 func_80184A00(void); -extern s16 func_80184B44(void); -extern s32 func_801848AC(s32 arg0, s32 arg1); -extern void func_801849B8(s32*, s32); - -void func_8018C218(void *a0) { - - extern short D_801E6968; - void *s0 = a0; - s32 v1 = func_80029504(); - s32 v0; - - if (v1 < 0xC8) { - v0 = func_80184A00(); - v1 = 3; - if (v0 == v1) { - return; - } - v0 = func_801848AC(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } else if (v1 < 0x258) { - v0 = 1; - } else if (v1 < 0x384) { - v0 = func_801848AC(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } else { - v0 = ((s32 (*)(void))func_80184B44)(); - v1 = 1; - if (v0 == v1) { - return; - } - v0 = func_801848AC(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } - - *(s16 *)((char *)s0 + 0x2) = 0x1; - ((void (*)(s32, s32))func_801849B8)((s32)s0, (s32)&D_801E6968); -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_801849B8(s32*, s32); - -void func_8018C2AC(void * arg0) { - - extern short D_801E6968; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)arg0); - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_801849B8)((int)arg0, (int)&D_801E6968); - } -} - - - - -s32 func_8018C2FC(void) -{ - - extern u16 D_80126B5E; - extern u16 D_80126B66; - extern u16 D_80126B62; - s16 v1; - s32 result; - - v1 = *(s16 *)&D_80126B5E; - if (v1 < 0x400) { - result = 0; - } else if (v1 >= 0x501) { - result = 0; - } else { - v1 = *(s16 *)&D_80126B66; - if (v1 < 0x580) { - result = 0; - } else if (v1 >= 0x601) { - result = 0; - } else { - v1 = *(s16 *)&D_80126B62; - result = (v1 >= -0x200); - } - } - return result; -} - - -extern void func_8012B2CC(s32 arg); - void func_8018C360(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 2; - *(s16 *)(v1 + 0x12) = -0x600; - func_8012B2CC((s32)a0); - } - - -extern void func_8012B2CC(s32 arg0); - void func_8018C390(u8 *param_1) { - s32 p; - *(short *)(param_1 + 0x2) = 4; - p = *(s32 *)(param_1 + 0x20); - *(short *)(p + 0x12) = 0x600; - func_8012B2CC((s32)param_1); - } - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_8012B2CC(s32 a0); -extern s32 func_801788B8(s32 arg0, s32 arg1); -extern s32 func_80029504(void); -extern s32 func_80029178(s32 arg); -extern void func_8018C56C(void); - -void func_8018C3C0(void *arg0) { - - extern u8 D_801E4918[]; - extern u8 D_801E4A08[]; - extern u8 D_801E97E0[]; - extern u8 D_801E97F0[]; - s32 v0; - s32 t; - s32 *p; - - v0 = ((s32 (*)(void *))func_8012C1B8)(arg0); - *(s32 *)((char *)arg0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(arg0); - } else { - func_8001C214(v0, *(s16 *)((char *)arg0 + 0x70) == 0 ? (s32)&D_801E4918[0] : (s32)&D_801E4A08[0]); - *(s16 *)((char *)arg0 + 0x5C) = 0x800; - *(s32 *)((char *)arg0 + 0x58) = - (s32)&D_801E97F0[*(s16 *)((char *)arg0 + 0x70) * 0x10] | 0x40000000; - func_8012E8E0((s32)arg0, (s32)&D_801E97E0[*(s16 *)((char *)arg0 + 0x70) * 8]); - *(s16 *)(*(s32 *)((char *)arg0 + 0x68) + 0xC) = 0x7FFF; - t = func_80029504(); - if ((func_80029178(0xF6) & 0xFF) == 0 && t < 0xE6) { - if (*(s16 *)((char *)arg0 + 0x70) == 0) { - *(s16 *)((char *)arg0 + 0x2) = 1; - *(s16 *)((char *)arg0 + 0x34) = 0; - func_801788B8((s32)arg0, (s32)func_8018C56C); - } else { - s32 *q = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 3; - *(s16 *)((char *)arg0 + 0x34) = 0; - *(s16 *)((char *)q + 0x12) = 0; - *(s32 *)((char *)arg0 + 0x1C) = 0x30; - } - } else { - if (*(s16 *)((char *)arg0 + 0x70) == 0) { - p = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 2; - *(s16 *)((char *)p + 0x12) = -0x600; - func_8012B2CC((s32)arg0); - } else { - p = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 4; - *(s16 *)((char *)p + 0x12) = 0x600; - func_8012B2CC((s32)arg0); - } - } - } -} - - - -extern void (*D_801E9920[])(void); - -void func_8018C530(void *a0) { - D_801E9920[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -/* func_8018C56C — state-2 gate for the SC04_018 actor state machine. - * - * Reads the actor's linked object (a0->0x64), requires its state word (+0x2) == 1 - * and the actor's own +0x34 flag clear, then asks func_8018C2FC() for permission; - * on success it stamps 1 into the linked object's +0x34, pokes func_80178BF8() and - * returns the address of the next callback (func_80172710). - * - * DECL SURFACE (§73 / §37): the TU already carries a fleet-canonical forward decl - * `extern void func_8018C56C(void);` (ov_SC04_018_jr_8017AE2C.c L7759) - * used only to take the function's ADDRESS at L7786. The byte-true signature - * disagrees on BOTH §73 axes (return void->s32 AND params void->void*), so neither - * the fleet widen nor a cast-at-use fixes it. Instead the definition is emitted - * under the C identifier `aF8018CB18` with an __asm__("func_8018C56C") label - * (§37 asm-label alias, the proven function-definition form — cf. - * src/ov_SC03_099/ov_SC03_099_after.c L533). The C-level name never collides with - * the canonical decl, the emitted symbol is unchanged, and codegen is byte-identical - * (verified: match_one MATCH 31/31 with and without the alias). - * - * ORACLE: .venv/bin/python tools/match_one.py func_8018C56C \ - * --c .run/s7/ov_SC04_018/func_8018C56C.c \ - * --asm-subdir asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C -> MATCH (31 ins) - */ - -extern s32 func_8018C2FC(void); -extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2539) */ -extern void func_80172710(void); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2231) */ - -s32 aF8018CB18(void *a0) __asm__("func_8018C56C"); - -s32 aF8018CB18(void *a0) -{ - if (*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) != 1) { - return 0; - } - if (*(u16 *)((s32)a0 + 0x34) != 0) { - return 0; - } - if (func_8018C2FC() == 0) { - return 0; - } - *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x34) = 1; - func_80178BF8(); - return (s32)func_80172710; -} - - -extern void func_80029124(s32, s32); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_800D0F4C(s32 a0); -extern s32 func_8012E57C(s32 a0, s32 a1); - - -void func_8018C5E8(void *a0) -{ - s32 result; - - *(u16 *)((s32)a0 + 0x34) = *(u16 *)((s32)a0 + 0x34) + 1; - - func_8002D4C8(0x7A0, 0); - func_80029124(0xF6, 1); - func_800D0F4C(0x59); - - result = func_8012E57C(0x1F2, 1); - - if (result) { - *(u16 *)(result + 0x34) = *(u16 *)(result + 0x34) + 1; - } -} - - - - - -s32 func_8018C658(void) { - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern s32 D_801ED800; - return !(D_801ED800 ^ 2); -} - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8018C670(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018C694); - - -extern s32 func_8012BEE8(s32 a0); -extern void func_8018C390(u8*); - -void func_8018C7C8(void *a0) { - u16 v1; - - v1 = *(u16 *)((char *)a0 + 0x34); - if (v1 == 0) { - return; - } - if (v1 != 1) { - return; - } - { - u16 *p = (u16 *)*(s32 *)((char *)a0 + 0x20); - - *(u16 *)((char *)p + 0x12) = *(u16 *)((char *)p + 0x12) + 0x20; - if (((s32 (*)(void))func_8012BEE8)()) { - ((void (*)(void *))func_8018C390)(a0); - } - } -} - - -void func_8018C830(void) { -} - -void func_8018C838(void) { -} - - -extern void (*D_801E9A58[])(void); - -void func_8018C840(void *a0) { - D_801E9A58[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -/* Declarations conformed to the TU (ov_SC04_018_jr_8017AE2C.c) — lever (A): - * func_8012A828 : TU declares `extern void ((void (*)(s32*, s32))func_8012A828)(s32*, s32);` - * at L3460 / L4615 / L5083 / L5372 / L5859 / L6004 / L6155 / - * L6479 / L6504 / L6529. The draft's `(s32, s32)` form caused - * the 7697-vs-6529 conflict. Conformed here; the type - * disagreement is pushed to a cast at the call site. - * D_8018D504 : TU declares `extern u8 D_8018D504[];` (block scope, L3467). - * Conformed; `(s32)D_8018D504` == `(s32)&D_8018D504`. - * func_801788B8 : verbatim from TU L2532 / L7756 (below the splice point). - * func_8012C354, D_801E9944, func_8018C974, func_8018C87C : no other - * declaration anywhere in the TU (func_8018C974 / func_8018C87C - * appear only as INCLUDE_ASM, which emits no C declaration). - * - * Body: the original draft was NOT byte-correct. `*(u16 *)(x + 2) = 1;` must be - * sequenced BEFORE the func_8012A828 call, not after it — with it after, gcc - * coalesces the store base onto $a0 (`sh v0,2(a0)`) and re-emits the arg copy, - * giving a 6-instruction ADDRESSING/cse diff. Moved above the call; both stores - * now retire off $s0 and the sh lands in the jal delay slot, as in the target. */ - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8012A828(s32, s32); -extern s32 func_801788B8(s32 arg0, s32 arg1); - -extern void func_8018C974(void); - -void func_8018C87C(s32 a0) { - - extern M2C_UNK D_801E9944; - extern u8 D_8018D504[]; - s32 s0 = a0; - if (func_8012C354(a0, (s32)&D_801E9944)) { - *(u8 *)(s0 + 0xC0) = 1; - *(u16 *)(s0 + 0x2) = 1; - ((void (*)(s32*, s32))func_8012A828)((s32 *)s0, (s32)D_8018D504); - func_801788B8(s0, (s32)func_8018C974); - } -} - - -void func_8018C8E0(void) { -} - - -extern void func_80178CBC(s32, s32); - -void func_8018C8E8(s32 *a0) -{ - - extern signed char D_801E9A34[]; - s32 v0; - - v0 = *(s16 *)((s32)a0 + 0x70); - v0 = v0 * 4; - ((void (*)(s32 *, s32))func_80178CBC)(a0, *(s32 *)((s32)D_801E9A34 + v0)); - *(s16 *)((s32)a0 + 0x2) = 0x3; -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); - -void func_8018C934(s32 a0) { - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)(a0); - *(s16 *)(a0 + 2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018C974); - - -extern void (*D_801E9B20[])(void); - -void func_8018C9D0(void *a0) { - D_801E9B20[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801E9B00[]; - -void func_8018CA0C(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801E9B00[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801E9B00)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801E9B00[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801E9B34[])(void); - -void func_8018CAD0(void *a0) { - D_801E9B34[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8018CA0C(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_8018CB0C(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_8018CA0C(param_1, -0x80); - func_8018CA0C(param_1, -0x30); - func_8018CA0C(param_1, 0x20); - func_8018CA0C(param_1, 0x70); - func_8018CA0C(param_1, 0xc0); - } - if (1 < uVar1) { - func_8018CA0C(param_1, -0x58); - func_8018CA0C(param_1, -0x8); - func_8018CA0C(param_1, 0x48); - func_8018CA0C(param_1, 0x98); - func_8018CA0C(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_8018CA0C(s32, s32); - -void func_8018CBF4(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_8018CA0C(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801E9B28; - -void func_8018CC34(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801E9B28, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_8018CCBC(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018CD04); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801875E8", func_8018CDB0); - - - - - diff --git a/src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c b/src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c new file mode 100644 index 0000000000..2dab4e3695 --- /dev/null +++ b/src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c @@ -0,0 +1,4590 @@ +#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 { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +typedef void (*Handler)(struct Entry_8016E95C *); +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F710; +extern u8 D_8018F680; +extern u8 D_8018F65C; +extern u8 D_8018F638; +extern u8 D_8018F6EC; +extern u8 D_8018F6C8; +extern u8 D_8018F6A4; +extern u8 D_8018F614; +extern void func_80145934(void); +extern u8 D_8018F7A0; +extern u8 D_8018F77C; +extern u8 D_8018F758; +extern u8 D_8018F734; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +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 s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EB98[]; +extern unsigned char D_8018EBC8[]; +extern unsigned char D_8018EC18[]; +extern unsigned char D_8018EC48[]; +extern unsigned char D_8018EC78[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ECC8[])(void *); +extern u8 D_80126BA4; +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 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_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +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 s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +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_80015954(s32 a0, s32 a1); +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 s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +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 void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +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(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +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_80147478(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_800484EC(s32 a0, s32 a1, s32 a2); +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 void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(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_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 u8 D_800B9A64; +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_80047D3C(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_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_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +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 void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +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 void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +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_80149FA8(void); +extern s32 D_8018ED90[]; +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 s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +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_80016714(void *a0, s32 a1); +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 void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +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 void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +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_8014B5B0(s32 *a0); +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_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(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 s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(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_8014C088(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 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +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 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE20; +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 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 void func_8014C978(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 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_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +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 void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); +extern s32 func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +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 s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +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 s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +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_8014E6F8(struct SubE6F8 *a0); +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 s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +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_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EBA00; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EBA04; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(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 short func_801508F8(s32 a0); +extern s32 D_8018EE50; +extern s32 D_80126990; +extern s32 D_80126994; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 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_8012DB84(void); +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_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 s32 func_80151944(void); +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_80154A74(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 void (*D_8018EEF8[])(void); +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_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF0C; +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 (*D_8018EF30[])(void); +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 u8 D_8018EF3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF4C[])(void); +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 (*D_8018EF64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF54; +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 (*D_8018EF78[])(void); +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 (*D_8018EF94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EF84; +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 (*D_8018EFA8[])(void); +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 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 (*D_8018EFBC[])(void); +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 (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +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 s32 D_8018EFD0; +extern void (*D_8018EFF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018EFD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +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_800183E0(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_80029178(s32); +extern int (*D_8018F044[])(void); +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 void (*D_8018F048[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(s16 *a0, s16 *a1); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F4BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern s32 func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EBA38; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F4E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F4C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F4D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F524[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F52C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F4F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F538[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F508; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EBA40; +extern s32 D_801EBA4C; +extern s32 D_801EBA50; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F574[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F548[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EBA48; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F7C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F5E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F868[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F9BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F7D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018F9C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F7E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F808; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018F9CC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(s32 arg0); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018F9F4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018FA00[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern void func_8015CC40(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018F874[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018FAA4; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018EB88[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018FAB8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018FAF4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018FB3C; +extern u16 D_8018FB3E; +extern u16 D_8018FB40; +extern s32 D_8018FB44; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018FB4C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018F858; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018FBD0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018FC80[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018FCB0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018FD14; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801EBA58[]; +extern void func_8016216C(void); +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018FD38[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801EBAB0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018FD80[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018FD70; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801EAE90[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018FD88[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018FDDC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018FDA4; +extern s16 D_8018FDD8; +extern s16 D_8018FDD6; +extern s16 D_8018FDD4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018FDE8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801EBB10; +extern u8 D_801EBB11; +extern u8 D_801EBB12; +extern u8 D_801EBB13; +extern u8 D_801EBB14; +extern u8 D_801EBB15; +extern u8 D_801EBB16; +extern u8 D_801EBB17; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018FDF8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801EBB50; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018FE3C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018FEB8[]; +extern s32 D_8018FED8[]; +extern u8 D_8018FF54[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018FF74[]; +extern u8 D_8018FF94[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80190030[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801900AC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801EAEA0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801900B8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801900C0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80190188[])(void); +extern void func_80166618(void *a0); +extern void (*D_80190198[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801901A8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801901B4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80190114[]; +extern u8 D_80190128[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801901CC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801901D4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801901DC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801901E4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801901EC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801901F4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801901FC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801902B0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801902B8[])(void); +extern void func_80169F00(void *a0); +extern char D_80190268[]; +extern char D_80190228[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801902F0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801902FC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80190344[])(void); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801903C0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801EBE70; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801903B4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801903F8[]; +extern unsigned short D_80190400[]; +extern unsigned short D_80190408[]; +extern unsigned char D_801EBE78[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801EBE70; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80190410[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EBFAC; +extern M2C_UNK D_801EBFB0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EBF38; +extern void (*D_80190440[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801EBFB4[]; +extern u8 D_801EBFBC[]; +extern u8 D_801EBF6C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80190448[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80190464[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8019046C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801904D4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80190478; +extern u8 D_80190484; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80190508[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80190510[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80190564[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80190598[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80190588[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801905B4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32 _arg0); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8019062C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80190634[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8019063C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80190644[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8019064C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80190654[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80190660[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8019066C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80190678[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80190688[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80190698[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801906A0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801906A8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801906B0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801906B8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801906C0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801906C8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801906D0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801906D8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801906E0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801906E8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801906F0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801906F8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80190700[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80190708[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80190710[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80190718[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80190720[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80190728[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80190730[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80190738[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80190740[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80190748[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8019078C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80190750; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801907BC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801907F8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern void func_801748EC(void); +extern s32 func_801749C8(); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80190850[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80190860[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80190868[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175494(void); +extern void (*D_801909D0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801909DC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801EB0E8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801789AC(s32 arg0); +extern s16 D_801ED910; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801EC6F0; +extern short D_801ED984; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +extern s32 func_80178D40(s32 arg0, s32 arg1); +extern void func_80179B28(s32 a0); +extern void func_80179B74(u16 *p); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179DCC(short a0); +extern void func_80179DF8(void); +extern void func_80179E1C(short a0); +extern void func_80179E48(s16 a0); +extern void func_80179E74(s16 a0); +extern void func_80179EA0(u16 *a0); +extern void func_80179EE8(short a0); +extern void func_80179F14(s16 a0, s16 a1); +extern void func_80179F44(void); +extern void func_80179F6C(short a0); +extern void func_80179F98(u16 *a0); +extern void func_80179FEC(u16 *a0); +extern void func_8017A040(u16 *a0); +extern s32 D_801ECB1C; +extern void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +extern s32 D_801ECB44; +extern void func_8017A144(s32 a0); +extern void func_8017A180(void); +extern void func_8017A1A8(void); +extern void func_8017A1D0(void); +extern void func_8017A1F8(void); +extern void func_8017A220(void); +extern void func_8017A248(void); +extern void func_8017A270(void); +extern void func_8017A298(void); +extern void func_8017A2C0(void); +extern void func_8017A2E8(void); +extern void func_8017A310(void); +extern void func_8017A338(void); +extern void func_8017A360(void); +extern void func_8017A388(void); +extern s16 D_801ECB00; +extern s32 func_8017A3B0(void); +extern short D_801ECB3C; +extern short D_801ECB38; +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); +extern int func_8017A3D8(void); +extern void func_80172310(u8*); +extern void func_80172780(void*); +extern void func_80172894(void*); +extern void func_801729B0(s32); +extern void func_80172B14(s16); +extern void func_80172C50(u16 *); +extern void func_80172D68(s32); +extern void func_801733FC(s16, u16 *); +extern void func_80173460(s32, s32); +extern void func_801734BC(s32, s32); +extern void func_801736B0(s32, s32); +extern void func_801737B8(s16); +extern void func_801738DC(s16); +extern void func_80173A28(s32, s32, s32, s32, s32, s32); +extern void func_80174438(s32); +extern void func_8017A4AC(void); +extern s32 func_8017AD0C(s32 arg0); +extern s32 func_8017AD0C(s32); +extern s32 func_8017ADE8(s32 a0); +extern s32 func_8017AE08(void); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012AD80(s32 a0); +extern s32 func_8012B030(u8 *a0); +extern s32 func_8012B744(void *a0, void *a1); +extern s32 func_8012BE98(s32 a0, u16 *a1); +extern s16 D_801ED8C8; +extern s16 D_801ED8CA; +extern s16 D_801ED8D4; +extern void func_8017AE2C(s32 param_1); +extern void func_8017B0E4(int param_1, int param_2); +extern s16 D_801ECB04; +extern u16 D_801ECB84; +extern u16 D_801ECB86; +extern u16 D_801ECB88; +extern void func_8017B1D8(void); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B490(s32 param); +extern s32 func_8017B614(s32 param_1, s32 param_2); +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern u8 D_8012694C; +extern s16 D_801ECB7C; +extern s16 D_801ECB7E; +extern s16 D_801ECB80; +extern s16 D_801ECB74; +extern s16 D_801ECB76; +extern s16 D_801ECB78; +extern void func_8017B7A8(void); +extern s16 D_801ECB94; +extern s16 D_801ECB96; +extern s16 D_801ECB98; +extern s16 D_801ECB9C; +extern s16 D_801ECB9E; +extern s16 D_801ECBA0; +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern short D_801ECB8C; +extern short D_801ECB8E; +extern short D_801ECB90; +extern void func_8017B940(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); +extern SV4 D_801ECB24; +extern SV4 D_801ECB2C; +extern void func_8017BA3C(s32 param_1, s32 param_2); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void (*D_801ECB4C[10])(int); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8012A4BC(void); +extern void func_8017BCF4(int param_1); +extern void (*D_801ECB48)(void); +extern void func_8017BD50(int param_1); +extern void (*D_80190BB8[])(void); +extern void func_8017BE60(void *a0); +extern void (*D_80190C58[])(void); +extern void func_8017BE9C(void *a0); +extern void (*D_80190C60[])(void); +extern void func_8017BED8(void *a0); +extern void (*D_80190C68[])(void); +extern void func_8017BF14(void *a0); +extern u8 *func_8012913C(s32 a0); +extern s32 func_8012C750(s32 a0); +extern void func_8017BF50(s32 a0); +extern void func_8017C094(void); +extern void func_8017C100(s32 param_1); +extern void func_8017C1AC(s32 param_1); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012A828(s32, s32); +extern void func_8012B260(u8 *a0); +extern void func_8017C1EC(s32 a0); +extern void func_8017C2B0(s32 a0); +extern void (*D_80190C88[])(void); +extern void func_8017C338(void *a0); +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_8017C374(s32 param_1); +extern void func_8017C538(u8 *p); +extern void (*D_80190C90[])(void); +extern void func_8017C5CC(void *a0); +extern u8 D_80190C7C; +extern void func_8017C608(s32 a0); +extern void func_8017C6AC(int a0); +extern void func_8017C710(s32 arg0); +extern void (*D_80190CA8[])(void); +extern void func_8017D5F0(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_80190C98; +extern void func_8017D62C(s32 arg0); +extern void func_8017D6A8(void); +extern void (*D_80190CE0[])(void); +extern void func_8017D6B0(void *a0); +extern void func_8017DA08(void *arg0); +extern s32 func_8012AD50(void *arg0); +extern void func_8017D6EC(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_8017D9B8(void); +extern void func_8017DAC4(void *arg0); +extern void aF8017D77C(); +extern void func_80017714(void *); +extern u32 D_801ECE40; +extern u16 D_80190CE8[]; +extern u16 D_801ECE44[]; +extern s32 D_80190D08; +extern void func_8017DC0C(void); +extern void func_8017E050(void *arg0); +extern s32 func_8017DC98(s32 param_1); +extern s32 func_8017DCE8(void); +extern void func_800D1E28(void); +extern s32 func_800D1D94(void); +extern void func_8001BFD0(void); +extern s32 func_8017DD7C(s32 a0); +extern void func_800D1EBC(void); +extern void func_8017DE2C(void); +extern s32 func_8017DE4C(void *a0); +extern void (*D_80190D28[])(void); +extern void func_8017DF4C(void *a0); +extern void (*D_80190D30[])(void); +extern void func_8017DF88(void *a0); +extern void (*D_80190D3C[])(void); +extern void func_8017DFC4(void *a0); +extern void (*D_80190D48[])(void); +extern void func_8017E000(void *a0); +extern s32 D_80127050; +extern void func_8017E03C(void); +extern void (*D_80190FFC[])(void); +extern void func_8017E050(void *a0); +extern void func_8017E08C(u8 *a0); +extern void func_8017E0A0(void *a0); +extern void (*D_80191004[])(void); +extern void func_8017E0D8(void *a0); +extern void func_8017E114(void *a0); +extern void func_8017E128(void); +extern void func_8012A094(s32 a0); +extern void func_8017E20C(void *a0); +extern void func_8017E148(void); +extern void (*D_8019100C[])(void); +extern void func_8017E27C(u8 *a0); +extern void func_8017E284(void *a0, u8 *a1); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017E3C4(s32 param_1); +extern void (*D_80191158[])(void); +extern void func_8017E5B8(void *a0); +extern void func_80029514(int); +extern void func_8017E5F4(void); +extern void func_8012E8E0(s32, s32); +extern void func_8012E88C(s32); +extern void func_80184990(s32); +extern void func_80184BD4(s32, s32, s32, s32); +extern void func_8017E7EC(void *arg0); +extern void (*D_801912B8[])(void); +extern void func_8017ED1C(void *a0); +extern s16 func_80184B44(void); +extern void func_8017ED94(s32 a0); +extern s32 func_8017EDD4(void); +extern void func_80029124(s32 arg0, s32 arg1); +extern void func_8017F174(void); +extern void func_801849B8(s32 *a0, s32 a1); +extern void func_8017F398(short *a0); +extern void (*D_80191350[])(void); +extern void func_8017F3C4(void *a0); +extern short D_80191318; +extern void func_8017F400(short *param); +extern void func_8017F42C(s32 a0); +extern void func_801849B8(s32*, s32); +extern void func_8017F53C(void * arg0); +extern s32 func_801845DC(void); +extern s32 func_80185F5C(void *); +extern s32 func_80178BF8(void); +extern s32 func_8017F650(void *a0); +extern void func_8017F6C8(void *arg0); +extern void func_8012E88C(s32 a0); +extern void func_80184990(s32 a0); +extern void func_8017F73C(void *a0); +extern void func_8017F81C(void * arg0); +extern void (*D_801913FC[])(void); +extern void func_8017F98C(void *a0); +extern short D_8019139C; +extern void func_8017FA2C(void *arg0); +extern void func_8017FA58(s32 a0); +extern s32 func_8017FA98(void *a0); +extern s32 func_8012BD14(s32 a0); +extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2541) */ +extern s32 func_8017FB10(void *a0); +extern s32 func_801858E0(s32 a0); +extern s32 func_80184CA4(s32 a0); +extern void func_8017FCA0(void *a0); +extern void func_8017FDB8(void *a0); +extern void func_80178CBC(s32 a0, s32 a1); +extern void func_8017FFBC(void * arg0); +extern void func_80180188(void * arg0); +extern void func_80180240(void * arg0); +extern void (*D_80191504[])(void); +extern void func_801804F0(void *a0); +extern void func_80178CBC(s32, s32); +extern void func_8018052C(void *arg0); +extern void func_8018058C(s32 a0); +extern s32 func_801805F0(void *a0); +extern s32 func_801848AC(s32 arg0, s32 arg1); +extern void func_80180124(void *arg0); +extern void func_80180748(void *arg0); +extern void func_80184BD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80180188(void *a0); +extern void func_80180808(void *arg0); +extern void func_801801B4(void *arg0); +extern void func_80180894(void *arg0); +extern void func_8018026C(void *arg0); +extern void func_801809E0(void *arg0); +extern void func_80180A20(void *arg0); +extern void func_80180A94(void *a0); +extern void func_80180C30(short *a0); +extern void (*D_8019187C[])(void); +extern void func_80180DA4(void *a0); +extern void func_80180ED0(short *a0); +extern void func_80180EFC(s32 a0); +extern s32 func_80180F3C(void *a0); +extern s32 func_80180FB4(void *a0); +extern void func_80181144(void *a0); +extern void func_80181268(void *a0); +extern void func_80180C30(short*); +extern void func_801812D8(void *arg0); +extern void func_80181464(void * arg0); +extern void func_801814F0(void *arg0); +extern void func_80181564(void *a0); +extern void (*D_80191990[])(void); +extern void func_80181630(void *a0); +extern void func_8018166C(void *arg0); +extern s32 func_801816DC(void); +extern void func_80181718(void *arg0); +extern void func_801815BC(void *arg0); +extern void func_801817F0(void *arg0); +extern void func_80181830(void *a0); +extern void func_80181B04(short *a0); +extern void (*D_80191AA4[])(void); +extern void func_80181B30(void *a0); +extern void func_80181B6C(void * arg0); +extern void func_80181B98(s32 a0); +extern void func_80181B04(short*); +extern void func_80181CA4(void *arg0); +extern void func_80181CF0(void *a0); +extern void func_80181D00(void * arg0); +extern void func_80181E90(void *arg0); +extern void (*D_80191C18[])(void); +extern void func_80182234(void *a0); +extern void func_80182270(void * arg0); +extern void func_8018229C(s32 a0); +extern s32 func_801822DC(void); +extern void func_801823D0(void *arg0); +extern s32 func_80181F00(void *a0); +extern void func_80182410(int param_1); +extern void func_80182540(void); +extern void func_80182874(short *param_1); +extern void (*D_80191E84[])(void); +extern void func_80182BB0(void *a0); +extern void func_80182BEC(s32 a0); +extern void func_80182C2C(s32 a0); +extern void func_80182C6C(s32 a0); +extern s32 func_80182CAC(void); +extern s32 func_80182CE8(void); +extern void func_80182D0C(short *a0); +extern void func_80182D3C(short *a0); +extern void func_80182D6C(short *a0); +extern void func_80182D9C(short *a0); +extern void func_80182A28(s32 *a0); +extern void func_80182DCC(s32 *a0); +extern void func_80182874(short*); +extern void func_80182E68(s32 *a0); +extern void func_801828A0(void *arg0); +extern void func_80182F04(void *arg0); +extern void func_80183328(void *a0); +extern void (*D_80191F98[])(void); +extern void func_80183380(void *a0); +extern void func_801833BC(void * arg0); +extern void func_801833E8(short *param); +extern void func_80183414(short *param); +extern void func_80183440(short *param); +extern void func_80183724(void * arg0); +extern s32 func_801789AC(s32); +extern void func_80183830(void *a0); +extern void func_80183980(void * arg0); +extern void (*D_80192140[])(void); +extern void func_80183CC0(void *a0); +extern void func_80183CFC(void * arg0); +extern void func_80183D28(short *a0); +extern void func_8014AD7C(s32 arg); +extern void func_80183DEC(void); +extern s32 func_80183ED4(void); +extern void func_80183980(void *arg0); +extern void func_80183EF8(void *arg0); +extern void func_80184004(void * arg0); +extern void func_801841B8(short *param_1); +extern void (*D_801921D8[])(void); +extern void func_801841E4(void *a0); +extern void func_80184220(short *a0); +extern void func_801841B8(short*); +extern void func_80184284(void *arg0); +extern void func_80184310(void * arg0); +extern void func_8018449C(void *a0); +extern void func_801844AC(void *a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 func_801844BC(void *a0, void *a1); +extern void func_8012A828(s32 arg0, s32 arg1); +extern void func_80184558(void *a0); +extern void func_80184584(void *a0); +extern void func_801845B0(void *a0); +extern s32 func_80184804(s32 arg0); +extern s32 func_80184660(s32 a0); +extern s32 func_80184660(s32 arg); +extern void func_80184790(void *a0); +extern void func_801847C4(void *a0); +extern short D_800BA2BA; +extern void (*D_801B86DC[])(void); +extern void func_8018482C(void *a0); +extern void func_80184868(void); +extern void func_80184870(void *a0, s32 a1, s32 a2); +extern s32 func_801848D0(u8 a0, u8 a1, u8 a2, u8 a3); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_80184928(void *a0, s32 a1); +extern void func_801849B0(void *a0); +extern void func_8012E8A8(u8 *a0); +extern s32 func_80184A00(void); +extern s32 func_80184A5C(void); +extern s32 func_80184AD0(void); +extern s32 aF80184B44(); +extern void func_80029514(s32 arg); +extern void func_80184BA0(void); +extern void func_8012B200(u8 *a0); +extern s32 func_80184E6C(s32 a0); +extern void (*D_801B86FC[])(void); +extern void func_80184EB4(void *a0); +extern void func_80184EF0(void); +extern void func_80184EF8(void); +extern void func_80184F00(void); +extern void func_80184F08(void); +extern void func_80184F10(void); +extern void func_80184F18(void *a0); +extern void func_80184F5C(void); +extern void func_8001D0E8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80184F64(s32 a0); +extern void func_80185678(s32 a0); +extern void func_80185604(s32 a0); +extern void func_801856D8(s32 a0); +extern void func_8018559C(s32 a0); +extern void func_80184FEC(s32 a0); +extern void func_8001C97C(s32 a0); +extern void *func_8018596C(void *a0); +extern void func_801851C4(s32 a0); +extern void func_80185A70(void *a0); +extern void func_80185364(void *a0); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern s32 func_80185BEC(void); +extern void func_801853E0(s32 a0); +extern void func_801854AC(void); +extern s32 func_8012BEE8(s32 a0); +extern void func_801854CC(s32 a0); +extern void func_80185758(s32 a0, s32 a1); +extern void func_80185D2C(s32 a0, s32 a1); +extern void func_801857B0(s32 a0); +extern void func_80185810(s32 a0); +extern void func_80185858(s32 a0); +extern void func_801858A8(s32 a0); +extern s32 func_80185A10(void *a0); +extern s32 func_80185FA8(void *a0); +extern void * func_8018596C(void *a0); +extern void func_80185C20(void *a0); +extern void aF80185EEC(); +extern void func_80185C54(void *a0, s32 a1, s32 a2); +extern void func_80185CB8(s32 a0, s32 a1, s32 a2); +extern void (*D_801B89F8[])(void); +extern void func_80185D84(void *a0); +extern void func_80185DC0(void *a0); +extern void func_80185E3C(void *a0); +extern s32 func_801860B4(s32 a0); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012CB64(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8012F214(s32 arg0, s32 arg1, s32 arg2); +extern void func_80186110(void); +extern s16 D_801ECE90; +extern s32 func_80186150(void); +extern void func_80029444(void); +extern void func_801754A8(void); +extern void func_80141C04(void); +extern void func_801861AC(void); +extern u8 D_80115138[]; +extern u8 D_80115148[]; +extern s16 D_801ED5F8; +extern s16 D_801ED5FC; +extern s16 D_801ED600; +extern s16 D_801ED604; +extern s16 D_801ED608; +extern s16 D_801ED60C; +extern s32 D_801ED5D8; +extern s32 D_801F27B0; +extern s32 D_801EF194; +extern s32 D_801EF7F0; +extern u8 D_801B9460[]; +extern s32 D_801B9428[]; +extern s32 resLoad_lastId; +extern s32 func_800149E0(s32 a0); +extern void func_80137B80(void); +extern s32 func_801376E8(s32 a0, s32 a1); +extern void func_80139954(void); +extern void func_80139A68(s32 a0, u16 a1); +extern s16 func_8014168C(s16 a0); +extern void func_80188478(void); +extern s32 func_80189240(s32 a0, s16 a1); +extern s16 func_80189B54(s32 a0); +extern void func_801875E8(void); +extern void func_801EFF44(s32 a0); +extern void func_80189BA0(void); +extern void func_80187DEC(void); +extern s32 func_80188128(void); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern s32 *func_80188F14(s32 *, void *, s32, void *, s32); +extern s32 func_80188884(void *, s32, s32, s32, s32 *); +extern s32 * func_801886B8(s32 *ot, Panel_8017E978_801886B8 *w0, s16 idx); +/* ==== end §8b carried decl layer ==== */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_80188B1C; + +/* func_80188B1C — ov_SC04_018 / ov_SC04_018_jr_801878E8, 254 ins, jtbl_801E599C (8 entries, + * minval 7 -> `addiu $a0,$a0,-7` + HImode re-extension, so the switch index type is short). + * + * Modelled on the ALREADY-MATCHED structural twin in the same overlay, + * src/ov_SC04_018/ov_SC04_018_jr_8013FFD8.c:1065 `func_8014032C` — same family: + * `result = D_801117EC;` default, `switch ((short)param_1)`, `((short)param_2)` at every use, + * `func_800291B4(D_8018E28C[...]) & 0xFF` -> `result = D_8018E34C[uVar3];`. + * Case bodies are emitted in SOURCE order, so the source order here is 10,7,8,13,14,11,default + * (read off the block order after the jr: 80188E70, 80188EB8, 80188F28, 80189004, 80189044, + * 80189108, 801891E0). + * + * Cases 9 and 12 are ABSENT from the source: their jtbl slots (indices 2 and 5) point at the + * default label 0x801891E0, which is also the out-of-range target of `beqz $v0,.L801891E0`. + * + * Three register/shape constraints read off the target: + * (a) each `& 0xFF` temp is BLOCK-SCOPED. A single function-scope temp gives one pseudo whose + * live range crosses the calls in cases 13/14, so gcc pins it to $s0; the target keeps it in + * $v1 / $v0 (dead before the call) and uses $s0 only for the value that IS live across a call. + * (b) case 14 uses u8 (QImode) locals. `lbu` into an s32 local is provably <=0xFF, so gcc folds + * `(v & 0xFF)` away; the target emits `andi $v1,$a0,0xFF` for the compare and + * `andi $s3,$a0,0xFF` for `n + 0x62`, which is the QImode-pseudo widening pattern. + * Case 13 has NO such andi, so there the local is s32 — the two cases are deliberately + * asymmetric (cookbook §160d). Case 14 also REUSES that one variable for `v + 1` + * (`v = v + 1`, not `u8 n = v + 1`): two pseudos gave `addiu $v0,$a0,1; andi $s3,$v0`, + * one pseudo gives the target's in-place `addiu $a0,$a0,1; andi $s3,$a0`. That was the + * last 2-instruction residual. + * (c) in case 11 the arms whose `lui/addiu $s1,%hi/%lo(sym)` sits BEFORE the branch (filling the + * `lw` load-delay slot) are assign-then-conditionally-override, not if/else: the address + * materialisation has to be in the SAME basic block as the load for the post-reload scheduler + * to hoist it. The arm at .L801891B4 keeps its `nop`, so that one is a plain `if`. + */ + + +s32 func_80188B1C(s32 param_1, s32 param_2) { + extern void *func_80189ADC(s32 a0); + extern s16 D_80115126; + extern u8 D_801117EC[]; + extern u8 * D_801ED554; + extern u8 * D_801ED55C; + extern u8 D_801ED618[]; + extern u8 D_8018E28C[]; + extern void * D_8018E34C[]; + extern void * D_801E9B94[]; + extern void * D_801B9390[]; + extern void * D_801B93AC[]; + extern s32 * D_801ED5D4[]; + extern s16 D_8010EDEE; + extern u8 D_8010EDF2; + extern s16 D_800A6586[]; + extern u8 D_801EEB7C[]; + extern u8 D_801EEFFC[]; + extern u8 D_801F2930[]; + extern u8 D_801F295C[]; + extern u8 D_801F2974[]; + extern u8 D_801F29A0[]; + + /* [T51] scoped in: these must not constrain the rest of the TU (cookbook §103). */ + + void *result; + + result = D_801117EC; + switch ((short)param_1) { + case 10: + if (D_80115126 != 5) { + result = D_8018E34C[D_801ED554[(short)param_2]]; + } else { + result = D_801B9390[(short)param_2]; + } + break; + + case 7: { + s32 t = func_800291B4(D_8018E28C[(short)param_2]) & 0xFF; + if (t != 0) { + s32 idx = t * 0xC; + if (*(s16 *)((u8 *)&D_8010EDEE + idx) != 0 && + D_80115126 == *((u8 *)&D_8010EDF2 + idx)) { + result = func_80189ADC(((short)param_2 & 3) + 6); + func_80139A68(*(s16 *)((u8 *)&D_8010EDEE + idx), 0); + } else { + result = func_80189ADC(5); + } + } + break; + } + + case 8: + if (D_80115148[0] != 0) { + s32 t = func_800291B4(D_8018E28C[(short)param_2]) & 0xFF; + if (t != 0) { + s32 idx = t * 0xC; + if (*(s16 *)((u8 *)&D_8010EDEE + idx) != 0 && + D_80115126 == *((u8 *)&D_8010EDF2 + idx)) { + result = func_80189ADC(((short)param_2 & 3) + 6); + func_80139A68(*(s16 *)((u8 *)&D_8010EDEE + idx), 0); + } else { + result = func_80189ADC(5); + } + } + } else { + s32 t = func_800291B4(D_8018E28C[(short)param_2]) & 0xFF; + if (t != 0) { + result = D_8018E34C[t]; + } + } + break; + + case 13: { + s32 e = D_801ED55C[(short)param_2]; + if ((func_800291B4(e + 0x62) & 0x80) != 0) { + result = D_801E9B94[e]; + } + break; + } + + case 14: { + u8 v = D_801ED618[(short)param_2]; + if (v != 0xFF) { + s32 code; + v = v + 1; + code = v + 0x62; + if ((func_800291B4(code) & 0xF0) == 0xC0) { + result = func_80189ADC(((short)param_2 & 1) | 6); + func_80139A68((s16)(D_800A6586[v] * 9 / 10), 0); + } else if ((func_800291B4(code) & 0xF0) == 0xE0) { + result = D_801EEB7C; + } + } + break; + } + + case 11: + if (D_80115126 == 4) { + if (D_80115148[0] == 0) { + result = D_801F2930; + if (D_801ED5D4[(short)param_2] == 0) { + result = D_801B93AC[(short)param_2]; + } + } else { + s32 *p = D_801ED5D4[(short)param_2]; + if (p != 0) { + result = D_801F29A0; + if (p[1] != 0) { + result = D_801F2974; + } + } else { + result = D_801F295C; + } + } + } else { + if (D_801ED5D4[(short)param_2] != 0) { + result = D_801EEFFC; + } + } + break; + + default: + result = func_80189ADC(0); + break; + } + return (s32)result; +} + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80188F14); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189240); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189ADC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189B14); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189B54); + + +/* func_80189BA0 — ov_SC03_001 (133 ins), exemplar of a 5-member open-only + * h_norm cluster. Builds the full-screen fade overlay: a DR_MODE-style 8-byte + * GP0 packet (0xE1000015), a 320x240 semi-transparent gouraud quad (POLY_G4, + * code 0x3A), and a second 8-byte GP0 packet (0xE1000240), each linked into the + * current OT with the psyq `addPrim` idiom. The type shapes and the + * `((PTag *)x)->addr = ((PTag *)ot)->addr; ((PTag *)ot)->addr = (u32)x;` pair + * are copied VERBATIM from the already-matched neighbour func_8018BCD4 in this + * same TU (§71) — Env_* / PTag_* there are the fleet-canonical shapes. + * + * Levers that were load-bearing (all byte-tested; the draft is PIN-FREE): + * §20 &D_801151D0 / &D_800B9A02 taken into pointer LOCALS -> each address is + * force_reg'd once (lui+addiu -> $t2 / $a3) instead of a %lo per use. + * §36 the 24-bit BITFIELD store, not a hand-written mask, is what emits + * 0x00FFFFFF (lui+ori) ahead of 0xFF000000 (lui) while the body ANDs the + * destination first — expmed's store_fixed_bit_field signature. + * §37 asm-label aliases for D_801ED56C/D_801ED570: the TU canon is u16/s16 + * but the target does a bare `lbu %lo(sym)`, and a plain block-scope + * `extern u8` would be a conflicting redeclaration. + * --- `volatile` on the OT index read keeps all SIX *pbh loads alive; a plain + * read cse-folds them and the function loses ~25 instructions. + * S1 the whole body is ONE branch-free basic block and every store ties at + * the same priority, so forward asm order == source statement order — + * the POLY_G4 block below is a literal transcription of the target. + * S2 `p` is destructively updated (multi-set -> no birthing boost) so its + * `addiu +8` floats up into the preceding load-delay gap, while `r` is a + * FRESH single-set local (boosted) so its `addiu +0x24` sinks to sit + * immediately before `sb 3($a0)`. Both placements are the target's. + * --- the bare `p = r;` before r's uses is a COMBINE BARRIER: without a SET + * of `p` between `r = p + 9` and r's first use, `can_combine_p` lets + * combine substitute `r` -> `p + 0x24` into every MEM offset and the + * `addiu` disappears entirely (and, at the tail, `p += 2` folds to + * `addiu $t3,$t3,0x2C` off the stale base instead of `addiu $t3,$a0,8`). + * It also fixes the register rotation for free — verified that adding or + * removing `register __asm__` pins on p/r/pbh is a byte no-op. + */ + +/* ---- TU-visible spellings (file scope of ov_SC03_001_jr_8018A3A8.c) ---- */ + +void func_80189BA0(void) { + + extern s32 D_801151D0; + extern u16 D_801ED56C; + extern s16 D_801ED570; + /* §100/§120: draft-local, uniquely-named types — they live in the BODY so + * they cannot collide with the TU's own Env_8018BCD4 / PTag_8018BCD4. */ + typedef struct { u32 addr : 24; u32 len : 8; } PTag_8018C960_80189BA0; + typedef struct { u32 *ot; u32 pad[4]; } Env_8018C960_80189BA0; /* 0x14 stride */ + typedef struct { + u32 tag; /* 0x00 */ + u8 r0, g0, b0, code; /* 0x04..0x07 */ + s16 x0, y0; /* 0x08, 0x0A */ + u8 r1, g1, b1, p1; /* 0x0C..0x0F */ + s16 x1, y1; /* 0x10, 0x12 */ + u8 r2, g2, b2, p2; /* 0x14..0x17 */ + s16 x2, y2; /* 0x18, 0x1A */ + u8 r3, g3, b3, p3; /* 0x1C..0x1F */ + s16 x3, y3; /* 0x20, 0x22 */ + } PG4_8018C960_80189BA0; /* -> 0x24 */ + + extern Env_8018C960_80189BA0 D_800AE7BC[]; + extern u8 aD801EF1EC __asm__("D_801ED56C"); + extern u8 aD801EF1F0 __asm__("D_801ED570"); + + u32 **pp; + volatile u16 *pbh; + u32 *p; + u32 *r; + u8 c1, c2; + + pp = (u32 **)&D_801151D0; + pbh = (volatile u16 *)&D_800B9A02; + + p = *pp; + ((PTag_8018C960_80189BA0 *)p)->len = 1; + p[1] = 0xE1000015; + ((PTag_8018C960_80189BA0 *)p)->addr = ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; + + p += 2; + ((PG4_8018C960_80189BA0 *)p)->tag = 0x08000000; + ((PG4_8018C960_80189BA0 *)p)->code = 0x3A; + ((PG4_8018C960_80189BA0 *)p)->x2 = -160; + ((PG4_8018C960_80189BA0 *)p)->x0 = -160; + ((PG4_8018C960_80189BA0 *)p)->x3 = 160; + ((PG4_8018C960_80189BA0 *)p)->x1 = 160; + c1 = aD801EF1EC; + ((PG4_8018C960_80189BA0 *)p)->b1 = c1; + ((PG4_8018C960_80189BA0 *)p)->b0 = c1; + ((PG4_8018C960_80189BA0 *)p)->g1 = c1; + ((PG4_8018C960_80189BA0 *)p)->g0 = c1; + ((PG4_8018C960_80189BA0 *)p)->r1 = c1; + ((PG4_8018C960_80189BA0 *)p)->r0 = c1; + c2 = aD801EF1F0; + ((PG4_8018C960_80189BA0 *)p)->y1 = -120; + ((PG4_8018C960_80189BA0 *)p)->b3 = c2; + ((PG4_8018C960_80189BA0 *)p)->b2 = c2; + ((PG4_8018C960_80189BA0 *)p)->g3 = c2; + ((PG4_8018C960_80189BA0 *)p)->g2 = c2; + ((PG4_8018C960_80189BA0 *)p)->r3 = c2; + ((PG4_8018C960_80189BA0 *)p)->r2 = c2; + ((PG4_8018C960_80189BA0 *)p)->y0 = -120; + ((PG4_8018C960_80189BA0 *)p)->y3 = 120; + ((PG4_8018C960_80189BA0 *)p)->y2 = 120; + + ((PTag_8018C960_80189BA0 *)p)->addr = ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)p; + + r = p + 9; /* 0x24 */ + p = r; /* COMBINE BARRIER — see header */ + ((PTag_8018C960_80189BA0 *)r)->len = 1; + r[1] = 0xE1000240; + ((PTag_8018C960_80189BA0 *)r)->addr = ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr; + ((PTag_8018C960_80189BA0 *)D_800AE7BC[*pbh].ot)->addr = (u32)r; + + p += 2; + *pp = p; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189DB4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189E68); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189ED0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189F24); + + +/* func_80189FE0 (ov_SC04_018, ov_SC04_018_jr_8017AE2C) — MATCH (250 ins) + * + * Shadow/marker quad renderer: builds an outer quad (D_801E6370 offset table) + * through RotNclip4, rejects it on OTZ, builds the inner quad (D_801E63F0) + * through RotTransPers4, then emits 4 semi-transparent POLY_G4 (0x24 each) + + * one semi-transparent POLY_F4 (0x18) out of one 0xA8 packet allocation. + * + * Levers that closed the residual (all byte-verified against the .s): + * - frame 0xE0 with locals starting at 0x30: STARTING_FRAME_OFFSET == + * outgoing-args size (RotNclip4 takes 11 args -> 0x2C -> 0x30). `pad0[16]` + * is the DEAD 0x20-byte first local (§136 idiom 6) that puts va at sp+0x50. + * - `sxy[8]` is ONE array: RotNclip4 fills [0..3], RotTransPers4 fills [4..7], + * and the loop indexes the whole thing (idx values run 0..7). + * - `register u16 *dst __asm__("$4")`: a HARD-reg dst is not a biv, so loop.c + * cannot strength-reduce its +2/+4 accesses into a second IV. That is what + * gives ONE register with offsets 0/2/4 (unpinned -> 254 ins, extra IV). + * - `p2 = p1 + 2` (two walked source pointers): `p1[0]` is a bare deref + * (excluded from givs, loop-map L1 rule 4) so p1 stays the biv used at + * offset 0, and p2 is the second IV carrying the -2/0 offset cluster. + * - `while` loops with `i++` written BEFORE the pointer bumps: the increment + * LUID order decides which bump fills the first load-delay slot. + * - `s16 idx[4]` as a real ARRAY (ARRAY_REF => MEM_IN_STRUCT_P): that makes + * the varying-address packet store conflict with the stack slots, so CSE + * cannot forward idx[1..3] and gcc re-loads them with `lh` (an + * INDIRECT_REF `*(s16*)(buf+0x82)` forwards them and loses the reloads). + * - `D_800A651C[][5]` / `D_801E01Dx[][4]` two-dimensional externs: the 1-D + * `sym + byte_offset` spelling makes gcc materialise `&D_800A651C` into a + * hoisted callee-saved register ($s5, +4 ins); the 2-D array-ref keeps the + * symbol folded in the MEM address (gas `lw $2,sym($1)` macro) and makes the + * table index a REDUCED GIV, whose preheader init lands AFTER the hoisted + * `addiu $s3,$sp,0x30` movable (target order s3 -> s2 -> s0). + * - `type2 = type + zr` ($zero pin): the target keeps TWO pseudos for + * (attr & 0xFF) — $a0 for the pre-call use and $s1 for the post-call one — + * so a plain second variable would be propagated away by CSE. + * - `pk[7] = 0x3A` written AFTER the 0x1C colour store: it only conflicts with + * the 0x04 store, so the scheduler sinks it into the `lh 0xB6($sp)` delay + * slot exactly as in the target (§135 idiom 4, source order sets the sink). + */ + +extern void func_8012E32C(void); +extern void func_8018A3C8(void *, s32); +extern s32 RotNclip4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); +extern s32 RotTransPers4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); +extern void *func_80010A08(s32); +extern s32 AddPrim(s32, void *); +extern void func_8012E28C(s32, s32); + +void func_80189FE0(u16 *a0, s32 a1) +{ + + extern s32 D_800A651C[][5]; + extern u16 D_801E6370[]; + extern u16 D_801E63F0[]; + extern u16 D_801E6490[][4]; + extern u16 D_801E6492[][4]; + extern u16 D_801E6494[][4]; + extern u16 D_801E6496[][4]; + register s32 zr __asm__("$0"); + + u16 pad0[16]; /* dead: locals begin at sp+0x30, va must land at sp+0x50 */ + u16 va[16]; /* sp+0x50 — outer quad, 4 x SVECTOR */ + u16 vb[16]; /* sp+0x70 — inner quad, 4 x SVECTOR */ + s32 sxy[8]; /* sp+0x90 — [0..3] RotNclip4, [4..7] RotTransPers4 */ + s16 idx[4]; /* sp+0xB0 */ + s32 p; /* sp+0xB8 */ + s32 otz; /* sp+0xBC */ + s32 flag; /* sp+0xC0 */ + + u16 attr; + s32 type; + s32 type2; + u16 *p1; + u16 *p2; + register u16 *dst __asm__("$4"); + s32 i; + u8 *pk; + s32 j; + + func_8012E32C(); + + attr = a0[3]; + type = attr & 0xFF; + type2 = type + zr; + if ((attr & 0xF00) == 0x200) { + func_8018A3C8(a0, a1); + return; + } + + p1 = (u16 *)((u8 *)D_801E6370 + type * 0x20); + i = 0; + p2 = p1 + 2; + dst = va; + while (i < 4) { + dst[0] = a0[0] + p1[0]; + dst[1] = a0[1] + p2[-1]; + dst[2] = a0[2] + p2[0]; + i++; + p1 += 4; + p2 += 4; + dst += 4; + } + + if (RotNclip4((s32)&va[0], (s32)&va[4], (s32)&va[8], (s32)&va[12], + &sxy[0], &sxy[1], &sxy[2], &sxy[3], &p, &otz, &flag) <= 0) { + return; + } + + otz -= 0x10; + if (otz < 0) { + return; + } + if (otz >= 0x1000) { + return; + } + + p1 = (u16 *)((u8 *)D_801E63F0 + type2 * 0x20); + i = 0; + p2 = p1 + 2; + dst = vb; + while (i < 4) { + dst[0] = a0[0] + p1[0]; + dst[1] = a0[1] + p2[-1]; + dst[2] = a0[2] + p2[0]; + i++; + p1 += 4; + p2 += 4; + dst += 4; + } + + RotTransPers4((s32)&vb[0], (s32)&vb[4], (s32)&vb[8], (s32)&vb[12], + &sxy[4], &sxy[5], &sxy[6], &sxy[7], &p, &flag); + + pk = func_80010A08(0xA8); + + for (j = 0; j < 4; j++) { + idx[0] = D_801E6490[j][0]; + idx[1] = D_801E6492[j][0]; + idx[2] = D_801E6494[j][0]; + idx[3] = D_801E6496[j][0]; + *(s32 *)(pk + 0x4) = a1 & -(idx[0] < 4); + *(s32 *)(pk + 0xC) = a1 & -(idx[1] < 4); + *(s32 *)(pk + 0x14) = a1 & -(idx[2] < 4); + *(s32 *)(pk + 0x1C) = a1 & -(idx[3] < 4); + pk[7] = 0x3A; + *(u32 *)(pk + 0x0) = 0x08000000; + *(s32 *)(pk + 0x8) = sxy[idx[0]]; + *(s32 *)(pk + 0x10) = sxy[idx[1]]; + *(s32 *)(pk + 0x18) = sxy[idx[2]]; + *(s32 *)(pk + 0x20) = sxy[idx[3]]; + AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); + pk += 0x24; + } + + *(s32 *)(pk + 0x4) = a1; + pk[7] = 0x2A; + *(u32 *)(pk + 0x0) = 0x05000000; + *(s32 *)(pk + 0x8) = sxy[0]; + *(s32 *)(pk + 0xC) = sxy[1]; + *(s32 *)(pk + 0x10) = sxy[2]; + *(s32 *)(pk + 0x14) = sxy[3]; + AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); + func_8012E28C(otz, 1); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018A3C8); + + +extern void (*D_801E67B0[])(void); + +void func_8018A440(void *a0) { + D_801E67B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018A47C); + + +extern void (*D_801E67DC[])(void); + +void func_8018A598(void *a0) { + D_801E67DC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E67E4[])(void); + +void func_8018A5D4(void *a0) { + D_801E67E4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E67F4[])(void); + +void func_8018A610(void *a0) { + D_801E67F4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E6804[])(void); + +void func_8018A64C(void *a0) { + D_801E6804[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018A688(void) { +} + + +extern s32 func_8012BEE8(s32 a0); +extern s32 rand(void); + +void func_8018A690(s32 param_1) { + s32 uVar1; + s32 iVar2; + register s32 iVar3 __asm__("$3"); + register s32 iVar4 __asm__("$16"); + u32 uVar3; + + uVar1 = *(u16 *)(param_1 + 0x34); + if (uVar1 == 1) { + goto case1; + } + if (uVar1 < 2) { + if (uVar1 == 0) { + goto case0; + } + return; + } + if (uVar1 == 2) { + goto case2; + } + if (uVar1 != 3) { + return; + } + goto case3; + +case0: + iVar2 = func_8012BEE8(param_1); + if (iVar2 == 0) { + return; + } + *(s32 *)(param_1 + 0x1c) = 0x40; + *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; + uVar3 = rand(); + iVar4 = uVar3 & 0x3fff; + iVar4 = iVar4 + 0x7800; + uVar3 = rand(); + if ((uVar3 & 1) == 0) { + iVar4 = -iVar4; + } + *(s32 *)(param_1 + 0xe0) = iVar4; + *(s32 *)(param_1 + 0xe4) = 0; + return; + +case1: + iVar3 = *(s32 *)(param_1 + 0xe4); + iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); + *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; + *(s32 *)(param_1 + 0xe4) = iVar3; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); + iVar2 = func_8012BEE8(param_1); + if (iVar2 == 0) { + return; + } + *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; + uVar3 = rand(); + uVar3 = uVar3 & 0x3f; + goto tail; + +case2: + *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + *(s32 *)(param_1 + 0xe4); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); + iVar2 = func_8012BEE8(param_1); + if (iVar2 == 0) { + return; + } + *(s32 *)(param_1 + 0x1c) = 0x40; + *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; + *(s32 *)(param_1 + 0xe0) = -*(s32 *)(param_1 + 0xe0); + return; + +case3: + __asm__ __volatile__("" ::: "memory"); + iVar3 = *(s32 *)(param_1 + 0xe4); + iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); + *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; + *(s32 *)(param_1 + 0xe4) = iVar3; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); + iVar2 = func_8012BEE8(param_1); + if (iVar2 == 0) { + return; + } + *(u16 *)(param_1 + 0x34) = 0; + uVar3 = rand(); + uVar3 = uVar3 & 0xff; + +tail: + *(u32 *)(param_1 + 0x1c) = uVar3 + 0x40; +} + + + +extern void (*D_801E6814[])(void); + +void func_8018A83C(void *a0) { + D_801E6814[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018A878); + +extern s32 D_801E64B0; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018A9D4(void) { + D_801ED7E0 = &D_801E64B0; + func_80189E68(0x474, 0x4B0); +} + + + +extern s32 D_801E64E8; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AA08(void) { + D_801ED7E0 = &D_801E64E8; + func_80189E68(0x474, 0x4EC); +} + + + +extern s32 D_801E6520; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AA3C(void) { + D_801ED7E0 = &D_801E6520; + func_80189E68(0x474, 0x4B0); +} + + + +extern s32 D_801E6548; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AA70(void) { + D_801ED7E0 = &D_801E6548; + func_80189E68(0x474, 0x4B0); +} + + + +extern s32 D_801E6580; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AAA4(void) { + D_801ED7E0 = &D_801E6580; + func_80189E68(0x474, 0x528); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018AAD8); + + +extern s32 D_801E65F8; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AB4C(void) { + D_801ED7E0 = &D_801E65F8; + func_80189E68(0x474, 0x1A4); +} + + + + +extern s32 func_80029504(void); +extern void func_80189E68(s32 arg0, s32 arg1); + +s32 func_8018AB80(void) { + + extern s32 D_801E6630; + s32 v; + D_801ED7E0 = (s32)&D_801E6630; + v = func_80029504(); + if ((u32)(v - 0x64) < 0x1F4) { + return -1; + } + func_80189E68(0x96, 0xF0); +} + + +extern s32 D_801E6650; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018ABCC(void) { + D_801ED7E0 = &D_801E6650; + func_80189E68(0x12C, 0x1A4); +} + + + +extern s32 D_801E66A0; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AC00(void) { + D_801ED7E0 = &D_801E66A0; + func_80189E68(0x474, 0x4B0); +} + + + +extern s32 D_801E6700; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AC34(void) { + D_801ED7E0 = &D_801E6700; + func_80189E68(0x474, 0x4B0); +} + + + + +extern s32 func_80029504(void); +extern void func_80189E68(s32 arg0, s32 arg1); + +s32 func_8018AC68(void) { + + extern s32 D_801E6730; + s32 v; + D_801ED7E0 = (s32)&D_801E6730; + v = func_80029504(); + if ((u32)(v - 0x64) < 0x1F4) { + return -1; + } + func_80189E68(0x474, 0x78); +} + + + +extern s32 D_801E6748; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018ACB4(void) { + D_801ED7E0 = &D_801E6748; + func_80189E68(0x564, 0x1A4); +} + + + +s32 func_8018ACE8(void) { + return -1; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018ACF0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018ADAC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018AE58); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018AE9C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018AFB8); + + +extern void func_8012B414(int a0); + void func_8018B054(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(temp_v1 + 0x14) += 0x8; + ((void (*)(void))func_8012B414)(); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B088); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B100); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B148); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B1EC); + +void func_8018B264(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 2; + } + + + +extern void (*D_801E682C[])(void); + +void func_8018B270(void *a0) { + D_801E682C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B2AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B314); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B360); + +extern s32 func_8012E57C(s32 a0, s32 a1); + +void func_8018B3A0(void *a0) { + s32 v0; + + v0 = func_8012E57C(0x61, 0xD); + *(s32 *)((char *)a0 + 0xCC) = v0; + v0 = func_8018B2AC(); + + if (v0 != 0) { + v0 = 2; + } else { + v0 = 1; + } + + *(s16 *)((char *)a0 + 0x2) = v0; +} + + +void func_8018B3E8(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 2; + } + + + +extern void (*D_801E6840[])(void); + +void func_8018B3F4(void *a0) { + D_801E6840[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B430); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B498); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B4FC); + +void func_8018B568(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 2; + } + + + +extern void (*D_801E6854[])(void); + +void func_8018B574(void *a0) { + D_801E6854[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B5B0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B604); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B648); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B688); + +void func_8018B6D0(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x2; + } + + + +extern void (*D_801E6868[])(void); + +void func_8018B6DC(void *a0) { + D_801E6868[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B718); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B780); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B7E4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B850); + + +extern void (*D_801E6874[])(void); + +void func_8018B93C(void *a0) { + D_801E6874[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B978); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B9DC); + + +extern void (*D_801E687C[])(void); + +void func_8018BA58(void *a0) { + D_801E687C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8018BA94(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BAA4); + + +extern void func_801849B8(s32*, s32); + extern short D_801E6884; + void func_8018BAE0(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32, s32))func_801849B8)((int)arg0, (int)&D_801E6884); + } + + + +extern void func_801849B8(s32*, s32); + extern short D_801E6884; + void func_8018BB0C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 3; + ((void (*)(s32, s32))func_801849B8)((int)arg0, (int)&D_801E6884); + } + + + +extern void (*D_801E6950[])(void); + +void func_8018BB38(void *a0) { + D_801E6950[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BB74); + +extern s32 func_8014CB1C(void); + s32 func_8018BBE8(void) { + return func_8014CB1C() != 0; + } + + +extern void func_8014B2A8(void); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8018BC08(void) { + func_8014B2A8(); + ((s32 (*)(s32, s32))func_8002D4C8)(0x464, 0); +} + + + + +extern void func_80178CBC(s32, s32); + extern short D_801E6908; + void func_8018BC34(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(short *)((char *)a0 + 0x34) = 0; + ((void (*)(s32 *, s32))func_80178CBC)((s32 *)a0, (s32)&D_801E6908); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BC64); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BCCC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BD38); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BDB0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BE14); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BEE0); + + +extern void func_801849B8(s32*, s32); + extern short D_801E6968; + void func_8018BF4C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32, s32))func_801849B8)((int)arg0, (int)&D_801E6968); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BF78); + + +extern void (*D_801E6A3C[])(void); + +void func_8018C068(void *a0) { + D_801E6A3C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801E69CC; + void func_8018C0A4(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801E69CC); + } + + +extern s32 func_800D0EC4(); +s32 func_8018C0D0(void) { + return func_800D0EC4() == 0; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018C0F0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018C194); + + +extern s32 func_80029504(void); +extern s32 func_80184A00(void); +extern s16 func_80184B44(void); +extern s32 func_801848AC(s32 arg0, s32 arg1); +extern void func_801849B8(s32*, s32); + +void func_8018C218(void *a0) { + + extern short D_801E6968; + void *s0 = a0; + s32 v1 = func_80029504(); + s32 v0; + + if (v1 < 0xC8) { + v0 = func_80184A00(); + v1 = 3; + if (v0 == v1) { + return; + } + v0 = func_801848AC(0xA, 0x10); + if (v0 == 0) { + return; + } + v0 = 1; + } else if (v1 < 0x258) { + v0 = 1; + } else if (v1 < 0x384) { + v0 = func_801848AC(0xA, 0x10); + if (v0 == 0) { + return; + } + v0 = 1; + } else { + v0 = ((s32 (*)(void))func_80184B44)(); + v1 = 1; + if (v0 == v1) { + return; + } + v0 = func_801848AC(0xA, 0x10); + if (v0 == 0) { + return; + } + v0 = 1; + } + + *(s16 *)((char *)s0 + 0x2) = 0x1; + ((void (*)(s32, s32))func_801849B8)((s32)s0, (s32)&D_801E6968); +} + + + +extern int func_80178970(void); +extern void func_80178D18(void); +extern void func_801849B8(s32*, s32); + +void func_8018C2AC(void * arg0) { + + extern short D_801E6968; + if (func_80178970() != 0) { + ((void (*)(s32))func_80178D18)((s32)arg0); + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32, s32))func_801849B8)((int)arg0, (int)&D_801E6968); + } +} + + + + +s32 func_8018C2FC(void) +{ + + extern u16 D_80126B5E; + extern u16 D_80126B66; + extern u16 D_80126B62; + s16 v1; + s32 result; + + v1 = *(s16 *)&D_80126B5E; + if (v1 < 0x400) { + result = 0; + } else if (v1 >= 0x501) { + result = 0; + } else { + v1 = *(s16 *)&D_80126B66; + if (v1 < 0x580) { + result = 0; + } else if (v1 >= 0x601) { + result = 0; + } else { + v1 = *(s16 *)&D_80126B62; + result = (v1 >= -0x200); + } + } + return result; +} + + +extern void func_8012B2CC(s32 arg); + void func_8018C360(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 2; + *(s16 *)(v1 + 0x12) = -0x600; + func_8012B2CC((s32)a0); + } + + +extern void func_8012B2CC(s32 arg0); + void func_8018C390(u8 *param_1) { + s32 p; + *(short *)(param_1 + 0x2) = 4; + p = *(s32 *)(param_1 + 0x20); + *(short *)(p + 0x12) = 0x600; + func_8012B2CC((s32)param_1); + } + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_80029504(void); +extern s32 func_80029178(s32 arg); +extern void func_8018C56C(void); + +void func_8018C3C0(void *arg0) { + + extern u8 D_801E4918[]; + extern u8 D_801E4A08[]; + extern u8 D_801E97E0[]; + extern u8 D_801E97F0[]; + s32 v0; + s32 t; + s32 *p; + + v0 = ((s32 (*)(void *))func_8012C1B8)(arg0); + *(s32 *)((char *)arg0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(arg0); + } else { + func_8001C214(v0, *(s16 *)((char *)arg0 + 0x70) == 0 ? (s32)&D_801E4918[0] : (s32)&D_801E4A08[0]); + *(s16 *)((char *)arg0 + 0x5C) = 0x800; + *(s32 *)((char *)arg0 + 0x58) = + (s32)&D_801E97F0[*(s16 *)((char *)arg0 + 0x70) * 0x10] | 0x40000000; + func_8012E8E0((s32)arg0, (s32)&D_801E97E0[*(s16 *)((char *)arg0 + 0x70) * 8]); + *(s16 *)(*(s32 *)((char *)arg0 + 0x68) + 0xC) = 0x7FFF; + t = func_80029504(); + if ((func_80029178(0xF6) & 0xFF) == 0 && t < 0xE6) { + if (*(s16 *)((char *)arg0 + 0x70) == 0) { + *(s16 *)((char *)arg0 + 0x2) = 1; + *(s16 *)((char *)arg0 + 0x34) = 0; + func_801788B8((s32)arg0, (s32)func_8018C56C); + } else { + s32 *q = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 3; + *(s16 *)((char *)arg0 + 0x34) = 0; + *(s16 *)((char *)q + 0x12) = 0; + *(s32 *)((char *)arg0 + 0x1C) = 0x30; + } + } else { + if (*(s16 *)((char *)arg0 + 0x70) == 0) { + p = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 2; + *(s16 *)((char *)p + 0x12) = -0x600; + func_8012B2CC((s32)arg0); + } else { + p = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 4; + *(s16 *)((char *)p + 0x12) = 0x600; + func_8012B2CC((s32)arg0); + } + } + } +} + + + +extern void (*D_801E9920[])(void); + +void func_8018C530(void *a0) { + D_801E9920[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +/* func_8018C56C — state-2 gate for the SC04_018 actor state machine. + * + * Reads the actor's linked object (a0->0x64), requires its state word (+0x2) == 1 + * and the actor's own +0x34 flag clear, then asks func_8018C2FC() for permission; + * on success it stamps 1 into the linked object's +0x34, pokes func_80178BF8() and + * returns the address of the next callback (func_80172710). + * + * DECL SURFACE (§73 / §37): the TU already carries a fleet-canonical forward decl + * `extern void func_8018C56C(void);` (ov_SC04_018_jr_8017AE2C.c L7759) + * used only to take the function's ADDRESS at L7786. The byte-true signature + * disagrees on BOTH §73 axes (return void->s32 AND params void->void*), so neither + * the fleet widen nor a cast-at-use fixes it. Instead the definition is emitted + * under the C identifier `aF8018CB18` with an __asm__("func_8018C56C") label + * (§37 asm-label alias, the proven function-definition form — cf. + * src/ov_SC03_099/ov_SC03_099_after.c L533). The C-level name never collides with + * the canonical decl, the emitted symbol is unchanged, and codegen is byte-identical + * (verified: match_one MATCH 31/31 with and without the alias). + * + * ORACLE: .venv/bin/python tools/match_one.py func_8018C56C \ + * --c .run/s7/ov_SC04_018/func_8018C56C.c \ + * --asm-subdir asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C -> MATCH (31 ins) + */ + +extern s32 func_8018C2FC(void); +extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2539) */ +extern void func_80172710(void); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2231) */ + +s32 aF8018CB18(void *a0) __asm__("func_8018C56C"); + +s32 aF8018CB18(void *a0) +{ + if (*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) != 1) { + return 0; + } + if (*(u16 *)((s32)a0 + 0x34) != 0) { + return 0; + } + if (func_8018C2FC() == 0) { + return 0; + } + *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x34) = 1; + func_80178BF8(); + return (s32)func_80172710; +} + + +extern void func_80029124(s32, s32); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_800D0F4C(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); + + +void func_8018C5E8(void *a0) +{ + s32 result; + + *(u16 *)((s32)a0 + 0x34) = *(u16 *)((s32)a0 + 0x34) + 1; + + func_8002D4C8(0x7A0, 0); + func_80029124(0xF6, 1); + func_800D0F4C(0x59); + + result = func_8012E57C(0x1F2, 1); + + if (result) { + *(u16 *)(result + 0x34) = *(u16 *)(result + 0x34) + 1; + } +} + + + + + +s32 func_8018C658(void) { + /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every + LATER function in this TU, which blocks a byte-true decl of a different type. + Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ + extern s32 D_801ED800; + return !(D_801ED800 ^ 2); +} + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8018C670(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018C694); + + +extern s32 func_8012BEE8(s32 a0); +extern void func_8018C390(u8*); + +void func_8018C7C8(void *a0) { + u16 v1; + + v1 = *(u16 *)((char *)a0 + 0x34); + if (v1 == 0) { + return; + } + if (v1 != 1) { + return; + } + { + u16 *p = (u16 *)*(s32 *)((char *)a0 + 0x20); + + *(u16 *)((char *)p + 0x12) = *(u16 *)((char *)p + 0x12) + 0x20; + if (((s32 (*)(void))func_8012BEE8)()) { + ((void (*)(void *))func_8018C390)(a0); + } + } +} + + +void func_8018C830(void) { +} + +void func_8018C838(void) { +} + + +extern void (*D_801E9A58[])(void); + +void func_8018C840(void *a0) { + D_801E9A58[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +/* Declarations conformed to the TU (ov_SC04_018_jr_8017AE2C.c) — lever (A): + * func_8012A828 : TU declares `extern void ((void (*)(s32*, s32))func_8012A828)(s32*, s32);` + * at L3460 / L4615 / L5083 / L5372 / L5859 / L6004 / L6155 / + * L6479 / L6504 / L6529. The draft's `(s32, s32)` form caused + * the 7697-vs-6529 conflict. Conformed here; the type + * disagreement is pushed to a cast at the call site. + * D_8018D504 : TU declares `extern u8 D_8018D504[];` (block scope, L3467). + * Conformed; `(s32)D_8018D504` == `(s32)&D_8018D504`. + * func_801788B8 : verbatim from TU L2532 / L7756 (below the splice point). + * func_8012C354, D_801E9944, func_8018C974, func_8018C87C : no other + * declaration anywhere in the TU (func_8018C974 / func_8018C87C + * appear only as INCLUDE_ASM, which emits no C declaration). + * + * Body: the original draft was NOT byte-correct. `*(u16 *)(x + 2) = 1;` must be + * sequenced BEFORE the func_8012A828 call, not after it — with it after, gcc + * coalesces the store base onto $a0 (`sh v0,2(a0)`) and re-emits the arg copy, + * giving a 6-instruction ADDRESSING/cse diff. Moved above the call; both stores + * now retire off $s0 and the sh lands in the jal delay slot, as in the target. */ + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8012A828(s32, s32); +extern s32 func_801788B8(s32 arg0, s32 arg1); + +extern void func_8018C974(void); + +void func_8018C87C(s32 a0) { + + extern M2C_UNK D_801E9944; + extern u8 D_8018D504[]; + s32 s0 = a0; + if (func_8012C354(a0, (s32)&D_801E9944)) { + *(u8 *)(s0 + 0xC0) = 1; + *(u16 *)(s0 + 0x2) = 1; + ((void (*)(s32*, s32))func_8012A828)((s32 *)s0, (s32)D_8018D504); + func_801788B8(s0, (s32)func_8018C974); + } +} + + +void func_8018C8E0(void) { +} + + +extern void func_80178CBC(s32, s32); + +void func_8018C8E8(s32 *a0) +{ + + extern signed char D_801E9A34[]; + s32 v0; + + v0 = *(s16 *)((s32)a0 + 0x70); + v0 = v0 * 4; + ((void (*)(s32 *, s32))func_80178CBC)(a0, *(s32 *)((s32)D_801E9A34 + v0)); + *(s16 *)((s32)a0 + 0x2) = 0x3; +} + + + +extern int func_80178970(void); +extern void func_80178D18(void); + +void func_8018C934(s32 a0) { + if (func_80178970() != 0) { + ((void (*)(s32))func_80178D18)(a0); + *(s16 *)(a0 + 2) = 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018C974); + + +extern void (*D_801E9B20[])(void); + +void func_8018C9D0(void *a0) { + D_801E9B20[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801E9B00[]; + +void func_8018CA0C(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801E9B00[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801E9B00)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801E9B00[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801E9B34[])(void); + +void func_8018CAD0(void *a0) { + D_801E9B34[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8018CA0C(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_8018CB0C(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_8018CA0C(param_1, -0x80); + func_8018CA0C(param_1, -0x30); + func_8018CA0C(param_1, 0x20); + func_8018CA0C(param_1, 0x70); + func_8018CA0C(param_1, 0xc0); + } + if (1 < uVar1) { + func_8018CA0C(param_1, -0x58); + func_8018CA0C(param_1, -0x8); + func_8018CA0C(param_1, 0x48); + func_8018CA0C(param_1, 0x98); + func_8018CA0C(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_8018CA0C(s32, s32); + +void func_8018CBF4(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_8018CA0C(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801E9B28; + +void func_8018CC34(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801E9B28, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_8018CCBC(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018CD04); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018CDB0); + + + + + +